現在、コンポーネントを使用するために、角度1.5.8のアプリケーションでいくつかのコードをリファクタリングしています。変数の前に呼び出される角型コンポーネントのトリガメソッド
(このガイドのいくつかの手順に非常に似ています:https://teropa.info/blog/2015/10/18/refactoring-angular-apps-to-components.html) 基本的なケースが正しく動作しています。
しかし、コンポーネントを変数を更新する必要があるときに問題が発生し、関数(両方とも親からバインドされています)を呼び出します。この場合、関数呼び出しは、変数がバインドされる前に発生しているようです。したがって、メソッドが親に対して実行されても、変数の古い内容が使用されています。
メソッドが実行される前に変数が更新されていることを確認するにはどうすればよいですか?
下記のコードでは、reset()関数の2行です。
angular.module('searchfieldComponent', [])
.component('searchfieldComponent', {
templateUrl: "/js/common/components/searchfield.component.tpl.html",
bindings: {
labelText: '@',
searchText: '=',
searchCallback: '&'
},
controllerAs: "vm",
controller: [function() {
var vm = this;
vm.search = function() {
vm.searchCallback();
}
vm.reset = function() {
vm.searchText = null;
// When the method bound to searchCallback executes in the parent,
// the variable bound to searchText has not yet been set to null
// it is still the old value.
vm.searchCallback();
}
}]
});
オブジェクトを使用してコンポーネント間でデータを渡した後、そのプロパティを変更するとどうなりますか? 'searchData: '="; /*...*/ vmのように。searchData.text = null' – raina77ow
これは機能します。ありがとう!私はこれがいつも同じオブジェクトだからだと思うので、タイミングの問題をこのように避けてください。答えとして投稿しても構いませんが、最適な解決策ではなく、回避策になるようオブジェクトをラップすることを検討します。より良い答えが現れなければ、私は数日後にそれを受け入れます。 – PMBjornerud