我正在创建一些具有隔离范围和一些别名属性的指令。例如:

scope: {
   prop1: '@'
}

我的问题是,何时将这些别名准确添加到范围中?我遇到了一些问题,这些问题是在链接函数中未定义的属性。运行此jsFiddle:http://jsfiddle.net/rvd6x/后,在控制台中查看。

当我尝试正常获取属性时,未定义。如果我稍后尝试通过一个函数(doStuff())来获得它,那它就在那里。或者,如果我用0做$timeout,它就在那里。显然,我可以使用$timeout解决问题,但是我想知道为什么我不能仅仅期望范围在链接函数中就已经拥有了它。必须在我所有的指令中都插入$timeout有点痛苦。

最佳答案

我发现这在指令定义内有效:

scope: {
    prop1: '@'
},
link: function(scope, element, attrs) {
    ...
    attrs.$observe('prop1', function(val) {
        scope.prop1 = val || 'default'
    });
    ...
}

使
<div my-directive></div>

表现得像
<div my-directive prop1="default"></div>

10-07 20:20