私は、親コンポーネントで定義されたオブジェクトを持ち、最初の子コンポーネントと2番目の子コンポーネントへの片方向バインディングで渡しました。最初の子コンポーネントがオブジェクトを変更します。私はなぜオブジェクトが何か変更されても、第二子コンポーネント$onChanges
が起動しない理由を理解できません。
angular.module('test', [])
.component('parent', {
template: "<first-child bind='vm.obj'></first-child>\
<second-child bind='vm.obj'></second-child>\
\t ",
controller: function(){
this.obj = {value: 0};
this.$onInit = function(){}
},
controllerAs: 'vm',
bindings: {}
})
.component('firstChild', {
template: "<button ng-click='vm.plus()'>+</button>\
<button ng-click='vm.minus()'>-</button>\
",
controller: function(){
this.plus = function(){
\t this.bind.value++;
}
this.minus = function(){
\t this.bind.value--;
}
\t \t
this.$onInit = function(){}
\t \t
this.$onChanges = function(obj){
\t \t console.log('first-child changed one-way bindings', obj)
}
},
controllerAs: 'vm',
bindings: {
\t bind: '<'
}
})
.component('secondChild', {
template: "<p>{{vm.bind.value}}</p>",
controller: function(){
\t \t this.$onInit = function(){}
\t \t this.$onChanges = function(obj){
\t \t \t console.log('second-child changed one-way bindings', obj)
\t \t }
},
controllerAs: 'vm',
bindings: {
bind: '<'
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body ng-app="test">
<parent></parent>
</body>
だから私の質問は、このような状況で$onChanges
を発射する方法があるさで、プロジェクトのビルドを持っていますか?
EDIT
$onChanges
は、私は、親の配列を定義した場合でも、結合一方向に第一子と第二子に渡す発生しませんし、最初の子に私が何かを押してください。しかし、その場合はオブジェクトが変更されているので、私はまだそれを否定しません。