angularjs没有消化范围?

时间:2014-07-01 18:02:53

标签: angularjs angularjs-directive

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",那么事情就没事了。

有什么收获?为什么手动订阅不起作用?

2 个答案:

答案 0 :(得分:2)

$watch()函数需要一个回调函数作为第二个参数 您的代码应如下所示:

scope.$watch('value', format);

<子> 您没有传递回调,而是传递了调用format() undefined的回复。

答案 1 :(得分:1)

首先,根据我的理解,您不需要为您的示波器进行双向绑定。

 scope:{
        value: '@',
        datatype: '@'
    },

其次,您的模板应该如下所示:

<span>{{valueToDisplay}}</span>