有没有办法在角度组件之间共享配置数据?

时间:2016-06-30 21:22:16

标签: angularjs

我有大约10个组件,它们都具有相同的绑定,并且大多数是相同的控制器。每个组件中唯一不同的是templateUrl,可能是控制器的一小部分。

由于Angular组件采用配置对象而不是工厂函数,这是否意味着我只需要在我的10个组件中使用一堆复制/粘贴?

我知道如果我将它们更改为指令,我可以共享配置,但我希望将它们保留为(面向未来的)组件。

1 个答案:

答案 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() {}
  }
}))