Angular v1.2.17
我正在创建一个使用过滤器格式化输出的指令。 我在另一个指令中使用该指令。
我的问题是,当父指令中的值发生变化时,指令不会更新DOM。
我正在使用value
订阅scope.$watch
变量。
app.directive('mdmFormattedOut', ['$filter', 'appSettingsService', function($filter, appSettingsService){
return{
restrict: 'A',
replace: true,
template:'<span ng-bind="valueToDisplay"></span>',
scope:{
value: '=',
datatype: '='
},
link: function(scope){
scope.$watch('value', format());
function format(){
switch(scope.datatype){
case 'date':
scope.valueToDisplay = $filter('date')(scope.value, appSettingsService.dateFormat);
break;
case 'currency':
scope.valueToDisplay = $filter('currency')(scope.value, appSettingsService.currency);
break;
default:
scope.valueToDisplay = scope.value;
break;
}
}
}
};
}]);
如果我将ng-bind="valueToDisplay"
替换为ng-bind="value"
,那么事情就没事了。
有什么收获?为什么手动订阅不起作用?
答案 0 :(得分:2)
$watch()
函数需要一个回调函数作为第二个参数
您的代码应如下所示:
scope.$watch('value', format);
<子>
您没有传递回调,而是传递了调用format()
undefined
的回复。
子>
答案 1 :(得分:1)
首先,根据我的理解,您不需要为您的示波器进行双向绑定。
scope:{
value: '@',
datatype: '@'
},
其次,您的模板应该如下所示:
<span>{{valueToDisplay}}</span>