angularjs没有理解范围?

angularjs没有理解范围?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,角度v1.2.17 我正在创建一个使用过滤器格式化输出的指令。 我在用另一个指令 我的问题是,当父指令中的值更改时,该指令不会更新DOM 我正在使用范围订阅值变量。$watch app.directive('mdmFormattedOut', ['$filter', 'appSettingsService', function($filter, appSettingsService){ return{ restrict: 'A', replace: true, templ

角度v1.2.17

我正在创建一个使用过滤器格式化输出的指令。 我在用另一个指令

我的问题是,当父指令中的值更改时,该指令不会更新DOM

我正在使用
范围订阅
变量。$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;
            }
        }
    }
};
app.directive('mdmFormattedOut',['$filter','appsetings服务',函数($filter,appsetings服务){
返回{
限制:“A”,
替换:正确,
模板:“”,
范围:{
值:'=',
数据类型:'='
},
链接:功能(范围){
范围.$watch('value',format());
函数格式(){
开关(scope.datatype){
案例“日期”:
scope.valueToDisplay=$filter('date')(scope.value,appsetingsservice.dateFormat);
打破
“货币”一案:
scope.valueToDisplay=$filter('currency')(scope.value,appsetingsservice.currency);
打破
违约:
scope.valueToDisplay=scope.value;
打破
}
}
}
};
}]))

如果我用
ng bind=“value”
替换
ng bind=“value”
则一切正常


有什么问题吗?为什么手动订阅不起作用

首先,据我所知,您的作用域不需要双向绑定

 scope:{
        value: '@',
        datatype: '@'
    },
其次,您的模板可能如下所示:

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

首先,据我所知,您的作用域不需要双向绑定

 scope:{
        value: '@',
        datatype: '@'
    },
其次,您的模板可能如下所示:

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

首先,据我所知,您的作用域不需要双向绑定

 scope:{
        value: '@',
        datatype: '@'
    },
其次,您的模板可能如下所示:

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

首先,据我所知,您的作用域不需要双向绑定

 scope:{
        value: '@',
        datatype: '@'
    },
其次,您的模板可能如下所示:

<span>{{valueToDisplay}}</span>
{{valueToDisplay}
函数需要一个回调函数作为第二个参数。
您的代码应该如下所示:

scope.$watch('value', format);
您没有传递回调,而是传递了调用
format()
的返回,它是
未定义的。
函数需要一个回调函数作为第二个参数。
您的代码应该如下所示:

scope.$watch('value', format);
您没有传递回调,而是传递了调用
format()
的返回,它是
未定义的。
函数需要一个回调函数作为第二个参数。
您的代码应该如下所示:

scope.$watch('value', format);
您没有传递回调,而是传递了调用
format()
的返回,它是
未定义的。
函数需要一个回调函数作为第二个参数。
您的代码应该如下所示:

scope.$watch('value', format);
您没有传递回调,而是传递了调用
format()
的返回,它是
未定义的。


您是如何创建的<代码>
?您是如何创建的<代码>
?您是如何创建的<代码>
?您是如何创建的<代码>
?没错,这肯定不是他的意图。但这不应该是不工作的原因,因为函数仍在启动和更改值。看到这个plunker函数执行一次(因为你显式地调用它)-这并不意味着$watch可以在子任务发生变化时工作并更新数据。不知道我在回答中怎么会错过这个@穆罕默德·马哈拉维:可能是因为这太明显了:)没错,这肯定不是他的意图。但这不应该是不工作的原因,因为函数仍在启动和更改值。看到这个plunker函数执行一次(因为你显式地调用它)-这并不意味着$watch可以在子任务发生变化时工作并更新数据。不知道我在回答中怎么会错过这个@穆罕默德·马哈拉维:可能是因为这太明显了:)没错,这肯定不是他的意图。但这不应该是不工作的原因,因为函数仍在启动和更改值。看到这个plunker函数执行一次(因为你显式地调用它)-这并不意味着$watch可以在子任务发生变化时工作并更新数据。不知道我在回答中怎么会错过这个@穆罕默德·马哈拉维:可能是因为这太明显了:)没错,这肯定不是他的意图。但这不应该是不工作的原因,因为函数仍在启动和更改值。看到这个plunker函数执行一次(因为你显式地调用它)-这并不意味着$watch可以在子任务发生变化时工作并更新数据。不知道我在回答中怎么会错过这个@MohamedElMahallawy:可能是因为太明显了:)这并没有解决问题,但你还是有道理的。不需要双向绑定!这并没有解决问题,但你还是有道理的。不需要双向绑定!这并没有解决问题,但你还是有道理的。不需要双向绑定!这并没有解决问题,但你还是有道理的。不需要双向绑定!