【发布时间】:2016-12-02 09:42:47
【问题描述】:
我已经编写了一个自定义指令来格式化值,自定义指令如下所示
var directiveapps = angular.module('myApp.currencyValues', []);
directiveapps.directive('currencyValue', function () {
return{
scope: {
data: '=items'
},
template: '<div>$ {{value|number}}</div>',
link: function(scope){
scope.value = Math.round(scope.data* 100) / 100;
}
};
});
该指令将值格式化为货币,并且将四舍五入小数点。我已经从这些视图中调用了这个指令。
<div class="overallsummary_meter_txt left">
Total Price<br>
<span currency-value items="totalPrice" class="orange_txt"></span>
</div>
这很好用。但是当值通过 ajax 传递给视图时,我发现了一些问题。指令在视图加载的那一刻执行,如果值需要时间来加载,那么变量 items 将没有任何值。因此,我从指令中得到了一个空值。 为了解决这个问题,我稍微修改了我的指令,如下所示。
var directiveApps = angular.module('gogocarApp.currencyValues', []);
directiveApps.directive('currencyValue', function () {
return {
transclude: true,
scope: {
items: '=items'
},
template: '<div>$ {{items|number}}<span ng-transclude></span></div>',
link: function(scope){
scope.watch('items', function () {
scope.items = scope.items ? Math.round(scope.items* 100) / 100 : 0;
});
}
};
});
我添加了一个 scope.watch 函数来解决我现有的问题。这适用于所有瞬间,并且我得到了格式化和正确的值作为输出指令。
但作为此之后的结果,在使用该指令的每个页面中都会显示控制台错误 scope.watch is not a function
1.如何消除此控制台错误?
2.是否需要再次修改指令?
【问题讨论】:
-
应该是
$watch,而不是watch。 -
它是
scope.$watch而不是$scope.watch
标签: javascript angularjs angularjs-directive angularjs-scope watch