【发布时间】:2019-01-13 14:45:02
【问题描述】:
按模型更新但不更新模型。我应该使用 $onChanges 函数
我有一个模型:
class Model {
constructor(data) {
this.data = data;
}
getData() {
return this;
}
}
2 个嵌套组件:
var parentComponent = {
bindings: {
vm: '<'
},
controller: function() {
var ctrl = this;
},
template: `
<div>
<a ui-sref="hello.about" ui-sref-active="active">sub-view</a>
Parent component<input ng-model="$ctrl.vm.data">
<ui-view></ui-view>
</div>
`
};
var childComponent = {
bindings: {
vm: '<'
},
template: `
<div>
Child component <input ng-model="$ctrl.vm.data">
<br/>
Child component copy<input ng-model="$ctrl.vmCopy.data">
<br/>
Child component doCheck<input ng-model="$ctrl.vmCheck.data">
</div>
`,
controller: function() {
var ctrl = this;
ctrl.$onChanges = function(changes) {
ctrl.vmCopy = angular.copy(ctrl.vm);
ctrl.vm = ctrl.vm;
};
ctrl.$doCheck = function () {
var oldVm;
if (!angular.equals(oldVm, ctrl.vm)) {
oldVm = angular.copy(ctrl.vm);
ctrl.vmCheck = oldVm;
console.log(ctrl)
}
}
}
}
两者都从解析中获取数据:
.config(function($stateProvider) {
var helloState = {
name: 'hello',
url: '/hello',
resolve: {
vm: [function() {
return myModel.getData();
}]
},
component: 'parent'
}
var aboutState = {
name: 'hello.about',
url: '/about',
resolve: {
vm: [function() {
return myModel.getData();
}]
},
component: 'child'
}
$stateProvider.state(helloState);
$stateProvider.state(aboutState);
})
我希望在模型更改或父级更改时更新我的组件,但我不希望它们更新模型。
我认为这就是为什么绑定 '
这是一个fiddle 来说明我想要做什么。
换句话说: 我希望子组件在父更改时更新,但不希望子组件更新父组件。
您可以在 fiddle 中看到,如果我直接绑定到本地范围,子级会从父级获取更新,但也会更新父级
如果我将绑定复制到本地范围,则子级不会更新父级,但也不会被父级更新。 如果
【问题讨论】:
标签: javascript angularjs angularjs-components