У меня есть следующий код...
spa.factory("linkService", function() {
var currentLink = null;
return {currentLink:};
});
var cssController = spa.controller("cssController", function(linkService, currentLink) {
this.fileName = linkService.currentLink;
});
var navigationController = spa.controller("navigationController", function(linkService, currentLink) {
this.setLink = function(setValue) {
linkService.currentLink = setValue;
};
this.checkCurrent = function(checkValue) {
return linkService.currentLink == checkValue;
}
});
Я создал этот код из фрагмента, который я написал в другом вопросе, и исправил то, что, как мне сказали, было неправильным с моей первой попытки. Этот вопрос можно найти здесь. Это более конкретный случай и, следовательно, не является дубликатом.
После проверки консоли, я считаю, что проблема с этим скриптом лежит на фабрике.
Попытка функции фабрики linkService
- предоставить переменную currentLink
которой можно получить доступ и динамически изменить несколько контроллеров. Переменная внутри фабрики, к которой я верю, должна быть доступна, введя фабрику в зависимость от функции контроллера, а также от переменной.
В чем проблема?
Заводская фабрика linkService возвращает объект с слотом 'currentLink' и его значение не определено.
Вам нужно вернуть переменную напрямую или вы можете вернуть объект, который ссылается на вашу переменную, или вы можете вернуть объект, который включает в себя getter и seters для ваших переменных.
Последний вариант имеет то преимущество, что имеет хороший интерфейс, определенный на месте. Ваш код будет более читаемым.
spa.factory("linkService", function() {
var currentLink = "/myLink.html";
/* accessor for currentLink */
var getLink = function(){
return currentLink;
};
return {get: getLink}; // service interface
});
--- Обновить
Еще несколько деталей:
Завод должен возвращать объекты/методы как таковые:
spa.factory("linkService", function() {
var linkServiceFactory = {};
var _currentLink = null;
linkServiceFactory.currentLink = _currentLink;
return linkServiceFactory;
});
В контроллере, чтобы ввести его с заводским названием, чтобы получить его подчасти:
var cssController = spa.controller("cssController", function(linkService) {
this.fileName = linkService.currentLink;
});
По аналогии,
var navigationController = spa.controller("navigationController", function(linkService) {
// other code.
});