2

現在、bindOnce 機能をテストしながら Angular 1.3 に移行しています。この問題が発生しました: コードの正確な部分...

コントローラーコード:

this.value = 'value';
this.clickTest = function () {
    this.value = 'changed';
};

HTML:

//cm is the ControllerAs variable defined in the route
 <p> {{ ::cm.value}} </p>
 <button ng-click="cm.clickTest()"> CLICK </button>

...コントローラーでは正常に動作しますが、別のコントローラーでは動作しません-動作しているコントローラーではクリックイベントは値を変更しませが、動作していないコントローラーでは値を変更します-(コードは両方でまったく同じですコントローラー、ルーティングの変更、および明らかに他の何かも変更されます)。テスト環境を改善するために、両方のコントローラーを空にしました。

今私が知りたいのは、bindOnce 機能が期待どおりに動作するのを妨げるものはありますか? ビューで正しい構文 (::) が使用されているにもかかわらず、Angular コードがウォッチャーを削除しないようにする、または再度有効にするように強制するものはありますか?

私はAngular 1.3.2で作業しています

4

2 に答える 2

3

クリックしても値は変わらないと思いますが、関数のコンテキストのbcozthisが変更されていますclickTest

以下のコードを試してください。うまくいくことを願っています

var vm = this;
vm.value = 'value';
vm.clickTest = function () {
    vm.value = 'changed';
};
return vm;

また、bindOnce については、コントローラーで値が変更された後に再度バインドすることはできないと思います。コードをテストするために、ビューについて心配する必要はありません。

于 2014-11-19T13:18:05.657 に答える
1

Batarang 拡張機能が有効になっていると、AngularJS 1.3 の bind-once が機能しない

于 2014-12-29T14:27:03.973 に答える