2016-06-30 4 views
1

У меня около 10 компонентов, и все они имеют одинаковые привязки и в основном одни и те же контроллеры. Единственное, что отличается между каждым компонентом, это templateUrl и, возможно, небольшое дополнение к контроллеру.Есть ли способ совместного использования данных конфигурации среди угловых компонентов?

Поскольку угловые компоненты принимают объект конфигурации, а не заводскую функцию, означает ли это, что мне просто нужно использовать кучу копирования/вставки из моих 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)' дает мне бесконечную рекурсию. Я предполагаю, что в базовом config (?) Ему нужно другое имя, но тогда это сломает примеры 1 и 2 ... – Troy

Смежные вопросы