Я играю с angularjs
services
и factories
. Я создал фабрику под названием BookFactory
следующим образом:
// Code goes here
app
.factory('BootFactory', function() {
var bookFactory;
function add() {
}
function remove() {
}
function getAll() {
}
bookFactory = {
add: add,
remove: remove,
getAll: getAll
}
return bookFactory;
});
И BookService
выглядит следующим образом:
app.service('BookService', function() {
var bookService;
function add() {
}
function remove() {
}
function getAll() {
}
/*
It throws:
Uncaught ReferenceError: Invalid left-hand side in assignment.
How can I achieve the same structure with the services which I have used in factories.
this = {
add: add,
remove: remove,
getAll: getAll
};
*/
//Do I have to add all methods like this
this.add=add;
this.remove=remove;
this.getAll=getgAll;
//Or there any other better way to achieve it
});
Я хочу сделать так, чтобы я сохранил структуру, то есть хочу получить что-то вроде этого как для фабрики, так и для сервисов:
bookFactory = {
add: add,
remove: remove,
getAll: getAll
}
В случае фабрики он отлично работает. Но в случае службы я не могу этого сделать. потому что сервис работает с this
и я не могу этого сделать:
/*
It throws:
Uncaught ReferenceError: Invalid left-hand side in assignment.
How can I achieve the same structure with the services which I have used in factories.
this = {
add: add,
remove: remove,
getAll: getAll
};
*/
Я собираюсь сделать следующее:
//Do I have to add all methods like this
this.add=add;
this.remove=remove;
this.getAll=getgAll;
//Or there any other better way to achieve it
Есть ли лучший способ сделать это? Здесь плундр.
Вы можете создать bookService, например as-
app.service('BookService', function() {
return {
add:add,
remove:remove,
getAll:getAll
};
function add() {
}
function remove() {
}
function getAll() {
}
});
Вы можете сделать что-то вроде этого:
app.service('BookService', function() {
function add() {
}
function remove() {
}
function getAll() {
}
var bookService = {
add: add,
remove: remove,
getAll: getAll
};
return bookService;
});
Угловому не важно, как возвращается ваша услуга. Factory vs Service - это только то, как он вызван, фабрика называется так: factory() и сервис вроде этого: new service(). В JS конструктор может вернуть все, что вы хотите.
Фабрики и службы - это всего лишь два несколько разных способа создания экземпляра объекта службы.
Функция factory возвращает экземпляр.
Функция сервиса является функцией-конструктором и используется с new
(или что-то вроде этого) для создания экземпляра. Конструктор функции в JS может вернуть экземпляр объекта, который был реализован напрямую (вместо по умолчанию this
, читать далее).
Это должно позволить вам сделать это:
.service('BookService', function() {
var bookService;
function add() {}
function remove() {}
function getAll() {}
bookService = {
add: add,
remove: remove,
getAll: getAll
}
return bookService;
})
Так что да, factory
и service
могут функционировать точно так же из-за этого JS quirk.
Я действительно не знаю, почему вы хотите иметь один и тот же рецепт для обоих, поскольку семантически они делают то же самое, почему бы просто не создать все службы, используя в этом случае конкретный?