2016-06-30 10 views
1

Ich habe etwa 10 Komponenten, und alle haben die gleichen Bindungen und meist die gleichen Controller. Die einzige Sache, die unter jeder Komponente unterschiedlich ist, ist die templateUrl und vielleicht eine kleine Ergänzung zum Controller.Gibt es eine Möglichkeit, Konfigurationsdaten zwischen eckigen Komponenten zu teilen?

Da eckige Komponenten eher ein Konfigurationsobjekt als eine Factory-Funktion verwenden, bedeutet das, dass ich nur einen Haufen Kopieren/Einfügen unter meinen 10 Komponenten verwenden muss?

Ich weiß, ich könnte Config teilen, wenn ich sie zu Direktiven ändere, aber ich hatte gehofft, diese als (zukünftige) Komponenten zu halten.

Antwort

1

können Sie verwenden gemeinsames Config Objekt und erweitern sie mit benutzerdefinierten Eigenschaften, wenn es muss:

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

Wenn ich das täte, würde ich in der Lage sein, Dependency Injection zu verwenden, um mit dem Original/Basis-Controller? – Troy

+0

Ja, natürlich. – dfsq

+0

Danke für die ausführlichen Beispiele. In Beispiel 4 gibt mir die Zeile 'config.controller.call (this)' unendliche Rekursion. Ich nehme an, es braucht einen anderen Namen in der Basiskonfiguration (?) Aber dann würde das Beispiel 1 & 2 brechen ... – Troy

Verwandte Themen