0

如何从 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 时得到未定义?

4

2 回答 2

1

我相信这些undefined行是在代码的其他地方而不是指令上打印的。

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

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

结束
1
2 未定义
3 hohoho

于 2013-01-21T12:17:08.060 回答
0

我如何绑定 value func 以在观察之外为 scope.func2 设置值?

指令页面的“属性”部分下:

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

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

或者尝试@bmleite 的 Jx4hm/2 fiddle,其中使用“=”而不是“@”。如果您不需要插值(例如,您不需要执行类似 func="Hello {{modelInstance}}" 的操作),您可以使用 '=',它设置双向数据绑定,但值为在链接功能中可用。('@' 设置单向数据绑定。)

于 2013-01-21T20:41:37.327 回答