Каков правильный/самый чистый способ реализации фабрики/сервиса?В AngularJS какой самый чистый способ объявить завод/услугу?
Я пришел через несколько различных способов сделать это, и подумал про себя, что на самом деле лучший способ ...
Во-первых, этот метод:
(function(){
var github = function($http) {
var getUser = function(username) {
return $http.get("https://api.github.com/users/" + username)
.then(function(response) {
return response.data;
});
};
var getRepos = function(user) {
$http.get(user.repos_url)
.then(function(response) {
return response.data;
});
};
return {
getUser: getUser,
getRepos: getRepos
};
};
var module = angular.module("githubViewer");
module.factory("github", github);
}());
В недавнем уроке я читал это был использованный метод. Обратите внимание, что внизу я добавляю фабрику с именем, затем функцией. Вызов функции содержит $ http. Из моего понимания того, как (новые) работы с угловыми работами с контроллерами для правильной работы для минимизации, вам нужно передать $ http сначала как строку, а затем использовать его в качестве параметра. Который этот метод не делает.
Далее я переписал его выглядеть следующим образом:
(function(){
var github = function($http) {
this.getUser = function(username) {
return $http.get("https://api.github.com/users/" + username)
.then(function(response) {
return response.data;
});
};
this.getRepos = function(user) {
$http.get(user.repos_url)
.then(function(response) {
return response.data;
});
};
return {
getUser: getUser,
getRepos: getRepos
};
};
var module = angular.module("githubViewer");
module.factory("github", ["$http", github($http)]);
}());
Я добавил массив аргументов в заводском вызова. запускал код, и он работает одинаково. Я предполагаю, что это позволит минимизировать? (если раньше у него была проблема). Является ли избыточным добавлять «$ http» к самой фактической функции «var github = function ($ http)»? Потому что я также удалил «$ http», чтобы узнать, что произойдет, и все равно работает, как и ожидалось.
И, наконец, я попытался это:
(function(){
var module = angular.module("githubViewer");
module.factory("github",
["$http", function($http) {
this.getUser = function(username) {
return $http.get("https://api.github.com/users/" + username)
.then(function(response) {
return response.data;
});
};
this.getRepos = function(user) {
$http.get(user.repos_url)
.then(function(response) {
return response.data;
});
};
return {
getUser: getUser,
getRepos: getRepos
};
};
]
}());
Это выглядит чистейшая мне. Вместо передачи помеченной функции я передал анонимную функцию и дал строку для ее представления. Я запустил код, и он работал, как ожидалось. Я также добавил «это» ключевое слово вместо объявления переменной как функции. С или без «этого» он все еще работал.
Теперь вот путаница ... какой лучший способ? Не лучший из них? Я предпочитаю использовать this.name = function
над var name = function
. Что лучше в этом отношении? Является ли это на самом деле более читаемым использовать
module.factory("github"["$http", function($http)
против
module.factory("github", github);
или
module.factory("github", ["$http", github($http)]);"
И сверх того, должны контроллеры, услуги, фабрики, поставщики все объявляются таким же образом?
Я бы сказал, что этот вопрос субъективен и не может быть «дан». Тем не менее, я обычно придерживаюсь варианта варианта 1. В частности, я следую тому, как описывает Джон Папа в своем [Руководстве по стилю AngularJS] (https://github.com/johnpapa/angularjs-styleguide) – Tom
Это действительно вопрос предпочтения. Нет * неправильного пути. Даже с первым примером, если минимизация не является целью, то с этим нет никаких проблем. –
Я вижу, как это может быть предпочтительным, но должен быть общий стандартный способ. И если не то, к чему стремился фактический работодатель. – floor