AngularJS内插attrs $ observe

时间:2013-01-21 11:22:24

标签: angularjs directive

如何从attrs绑定范围。$ observe?

<test func="hohoho"></test>
app.directive('test', function(){
    return {
         restrict: 'E'
        , scope: { parentFunc: '@func'}
        , link: function(scope, element, attrs) {
                var func = '';

                attrs.$observe('func', function(val) {
                    func = val;
                    console.log(func);
                })
                console.log('end');
                console.log(func);
                            console.log(scope.parentFunc);

                });
        }
    };
});

当我跑步时,它会打印

end
undefined
undefined

(an empty string)
hohoho

为什么我在打印func和parentFunc时得到未定义?

2 个答案:

答案 0 :(得分:1)

我认为这些undefined行正在代码的其他地方打印而不是指令。

检查这个小提琴并查看控制台输出:http://jsfiddle.net/bmleite/Jx4hm/

你应该得到这样的东西(这是预期的输出):

  


  1
  2 undefined
  3 hohoho

答案 1 :(得分:0)

  

我如何绑定值func来设置scope.func2以外的值?

Directives页面的“属性”部分下:

  

在链接阶段,尚未评估插值,因此此时的值设置为未定义。

只有在$ observe回调函数中,该值才包含插值。您必须将“观察之外”的代码移动到$ observe回调函数中。

或者试试@ bmleite的Jx4hm / 2小提琴,其中'='代替'@'。如果你不需要插值(例如,你不需要像func =“Hello {{modelInstance}}”那样做,你可以使用'=',它设置双向数据绑定,但值是在链接功能中可用。 ('@'设置单向数据绑定。)