为什么我的AngularJS指令中的链接函数没有运行?
为什么我的AngularJS指令中的链接函数没有运行?
以下是一个简单的Angular JS示例的HTML和Javascript代码。在这个示例中,为什么链接函数没有运行并且将scope.flag
设置为true
(布尔值)而不是'true'
(字符串)?
Javascript:
angular.module('truthyTypes', []) .directive('myDirective', function(){ return { template: 'flag value: {{ flag }}flag type: {{ flag | typeOf }}', scope: { flag: '@' }, link: function(scope){ scope.flag = scope.flag === 'true'; } } }) .filter('typeOf', function(){ return function(input){ return typeof input; } }) ;
HTML:
Example - example-example78-production
问题的原因是隔离作用域(isolated scope)在link函数中不是立即可用的。可以参考这个类似问题的答案:AngularJS - Access isolated scope in directive's link function
解决方法是使用$timeout函数将代码延迟执行,以确保隔离作用域已经被创建。具体代码如下:
angular.module('myApp').directive('myDirective', ['$timeout', function($timeout) { return { restrict: 'E', scope: { data: '=' }, link: function(scope, element, attrs) { $timeout(function() { // 在这里可以访问隔离作用域 console.log(scope.data); }); } }; }]);
使用$timeout函数可以确保在link函数中访问隔离作用域时,作用域已经被创建,从而解决了问题。