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/

次のようなものが得られるはずです(これは期待される出力です)。

終了
12
未定義
3hohoho

于 2013-01-21T12:17:08.060 に答える
0

値funcをバインドして、監視の外部でscope.func2の値を設定するにはどうすればよいですか?

[ディレクティブ]ページの[属性]セクションから:

リンクフェーズ中、補間はまだ評価されていないため、この時点で値は未定義に設定されています。

$observeコールバック関数でのみ値に補間値が含まれます。「監視の外側」にあるコードを$observeコールバック関数に移動する必要があります。

または、@bmleiteのJx4hm/ 2フィドルを試してください。ここで、「@」の代わりに「=」が使用されます。補間が必要ない場合(たとえば、func = "Hello {{modelInstance}}"のようなことをする必要がない場合)、双方向のデータバインディングを設定する「=」を使用できますが、値は次のようになります。リンク機能で利用できます。(「@」は一方向のデータバインディングを設定します。)

于 2013-01-21T20:41:37.327 に答える