AngularJS 组件要求:componentOne 或 componentTwo
AngularJS component require: componentOne OR componentTwo
我想将模板中的一些函数传递给当前活动的父组件:
<div ng-click="thisComponent.parentComponent.fn()"></div>
父组件取决于您正在查看的页面和配置,所以我尝试了:
app.component('thisComponent', {
controllerAs: 'thisComponent'
require: {
parentComponent : '?^componentOne' || '?^componentTwo'
},
controller: function() {
this.$onInit = () => {
// Returns null when the parent is componentTwo
console.log(this.parentComponent);
}
}
});
代码没有中断,它实际上在 componentOne
是父级时有效,但当它不是时,this.parentComponent
计算为 null
,而不尝试 componentTwo
.
更新2018-02-28
可以使用@Korte 的回答(见下文),但仍然想知道为什么上面的代码不起作用。为什么它在第一个 returns null
时不评估下一个选项?有人愿意解释吗?
您可以要求两个父组件,然后检查定义了哪一个。
例如
app.component('thisComponent', {
controllerAs: 'thisComponent',
require: {
firstParent : '?^componentOne',
secondParent: '?^componentTwo'
},
controller: function() {
this.$onInit = () => {
this.parentComponent = this.firstParent || this.secondParent;
console.log(this.parentComponent);
}
}
});
我想将模板中的一些函数传递给当前活动的父组件:
<div ng-click="thisComponent.parentComponent.fn()"></div>
父组件取决于您正在查看的页面和配置,所以我尝试了:
app.component('thisComponent', {
controllerAs: 'thisComponent'
require: {
parentComponent : '?^componentOne' || '?^componentTwo'
},
controller: function() {
this.$onInit = () => {
// Returns null when the parent is componentTwo
console.log(this.parentComponent);
}
}
});
代码没有中断,它实际上在 componentOne
是父级时有效,但当它不是时,this.parentComponent
计算为 null
,而不尝试 componentTwo
.
更新2018-02-28
可以使用@Korte 的回答(见下文),但仍然想知道为什么上面的代码不起作用。为什么它在第一个 returns null
时不评估下一个选项?有人愿意解释吗?
您可以要求两个父组件,然后检查定义了哪一个。
例如
app.component('thisComponent', {
controllerAs: 'thisComponent',
require: {
firstParent : '?^componentOne',
secondParent: '?^componentTwo'
},
controller: function() {
this.$onInit = () => {
this.parentComponent = this.firstParent || this.secondParent;
console.log(this.parentComponent);
}
}
});