我有大约10个组件,它们都具有相同的绑定,并且大多数是相同的控制器。每个组件中唯一不同的是templateUrl,可能是控制器的一小部分。
由于Angular组件采用配置对象而不是工厂函数,这是否意味着我只需要在我的10个组件中使用一堆复制/粘贴?
我知道如果我将它们更改为指令,我可以共享配置,但我希望将它们保留为(面向未来的)组件。
答案 0 :(得分:1)
如果需要,您可以使用通用配置对象并使用自定义属性对其进行扩展:
var getConfig = function() {
return {
controller: function() { console.log('default controller'); },
templateUrl: 'default.html',
bindings: { }
}
}
// default component
app.component('one', getConfig())
// different templateUrl
app.component('two', angular.extend(getConfig(), {
templateUrl: 'another.html'
}))
// different controller
app.component('three', angular.extend(getConfig(), {
controller: function() { console.log('another controller'); }
}))
// ... and even extend controller itself
app.component('four', angular.extend(getConfig(), {
controller: function() {
// inherit default controller
getConfig().controller.call(this)
// and add custom functionality
this.newMethod = function() {}
}
}))