我创建了一个指令,接受一些属性并使用这些属性初始化隔离作用域。如果未指定属性,则应使用计算出的值初始化隔离作用域。
我添加了一个链接函数来检查作用域并初始化默认值(如果没有使用属性设置值)。作用域已初始化,但如果我设置默认值,则稍后将被框架覆盖。
一种解决方法是使用$timeout(...),然后在之后进行设置,但这似乎太过于繁琐。
我已经准备好了一个JSFiddle,以说明发生了什么。
我添加了一个链接函数来检查作用域并初始化默认值(如果没有使用属性设置值)。作用域已初始化,但如果我设置默认值,则稍后将被框架覆盖。
一种解决方法是使用$timeout(...),然后在之后进行设置,但这似乎太过于繁琐。
function ($timeout) {
return {
scope: { msg1: '@', msg2: '@' },
template: '<div>{{msg1}} {{msg2}} {{msg3}}</div>',
link: function ($scope, $elt, $attr) {
var action = function() {
if (!$scope.msg2) $scope.msg1 = 'msg1';
if (!$scope.msg2) $scope.msg2 = 'msg2';
if (!$scope.msg3) $scope.msg3 = 'msg3';
};
action();
//$timeout(action, 0);
}
};
});
我已经准备好了一个JSFiddle,以说明发生了什么。
- msg1 通过属性初始化,始终具有正确的值。
- msg2 不是通过属性初始化的,但可以使用属性设置。此值在链接方法被调用后被覆盖。
- msg3 并没有通过属性初始化,这甚至不可能。该值在构造控制器时设置,正常工作。
看来AngularJS在创建作用域并将其值更新到控制器创建和指令链接到DOM之后。有人能告诉我推荐的做法吗?