我正在使用一个Angular 1.5组件来构建以下结构:
<parent>
<child active="model.active">
<child active="model.active">
<child active="model.active">
</parent>
我的组件:
(function() {
'use strict'
angular.module('module').component('child',
{
templateUrl: 'template.html',
bindings: {
active: '<'
},
controllerAs: 'model',
controller: function() {
var model = this;
model.select = function() {
model.deselectAllChildren()(model);
model.active = true;
};
}
});
})();
父deselectAllChildren
方法:
model.deselectAllChildren = function(tabModel) {
model.active = false;
};
当用户选择其中一个子组件时,我希望它处于活动状态,而其他子组件处于非活动状态。因此,该逻辑使所有子项都处于非活动状态(以清除先前的选择),然后使选定的子项处于活动状态。默认情况下,父级的model.active
属性为false。这对于第一个select很有效,但是后续的select不起作用,因为之前选择的子组件不会取消选择,因为model.active = false
更改不会传播到子组件(因为父组件的model.active
值仍然是false
-但是一些子组件的model.active
等于true
。这无疑是一个作用域/绑定问题;我觉得我需要强制将model.active = false
下推到所有子级。有什么想法吗?
发布于 2017-07-16 21:27:04
这样如何:
<parent>
<child active="model.active === 0" on-select="model.active=0">
<child active="model.active === 1" on-select="model.active=1">
<child active="model.active === 2" on-select="model.active=2">
</parent>
angular.module('module').component('child',
{
templateUrl: 'template.html',
bindings: {
active: '<',
onSelect: '&'
},
controllerAs: 'model',
controller: function() {
var model = this;
model.select = function() {
model.onSelect();
};
}
});
https://stackoverflow.com/questions/45126347
复制相似问题