2016-06-30 99 views
1

我有大約10個組件,它們都具有相同的綁定,並且大多是相同的控制器。每個組件中唯一不同的是templateUrl,並且可能是控制器的一小部分。有沒有辦法在角度組件之間共享配置數據?

由於Angular組件需要一個配置對象而不是工廠函數,這是否意味着我只需要在我的10個組件中使用一堆複製/粘貼?

我知道我可以共享配置,如果我將它們更改爲指令,但我希望將它們保存爲(未來友好的)組件。

回答

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() {} 
    } 
})) 
+0

如果我這樣做,我將能夠使用依賴注入與原有/基控制器? – Troy

+0

當然可以。 – dfsq

+0

感謝您的詳細示例。在例4中,'config.controller.call(this)'這一行給了我無限遞歸。我想它在基礎配置(?)中需要一個不同的名稱但是那樣會破壞示例1和2 ... – Troy

相關問題