У меня есть два вопроса для нижеприведенных кодов: я просто изучаю angularjs
и считаю, что это очень запутанно:
почему я не могу поставить 'ngResource' внутри, как angular.module('factory.quote', []). factory ('QuoteFactory', ['ngResource', '$ resource', function ($ resource)
(function () {
'use strict';
angular.module('app', [
// Angular modules
'ngRoute',
'controller.quote',
// Custom modules
'factory.quote'
// 3rd Party Modules
]);
angular.module('controller.quote', []).controller('QuoteController', ['$scope', 'QuoteFactory', function ($scope, QuoteFactory) {
$scope.quote = QuoteFactory.query();
}]);
/*angular.module('controller.quote', []).controller('QuoteController', ['$scope', 'factory.quote', function ($scope, factory.quote) {
$scope.quote = factory.quote.query();
}]);*/
angular.module('factory.quote',['ngResource']).factory('QuoteFactory', ['$resource', function ($resource) {
return $resource('/api/quote', {}, {
query: { method:'GET',param: {},isArray:true}
});
}])
})();
Обычно угловая парадигма для веб-приложений от среднего до большого размера идет таким образом
У нас есть отдельная папка для контроллеров, сервисов/фабрик, директив, констант, фильтров и т.д....
фактически при создании любого модуля мы выполняем функцию angular.module('your-module-name', ['depend modules']);
Поэтому, создавая контроллеры,
мы говорим, что ваш-module-name.controller('your-controller-name', ['зависимые фабричные/служебные модули'])
так что контроллер действует как логическая реализация (r) на стороне клиента и связывается с услугами, в которых фабричная функция имеет http-вызовы на стороне сервера
Так что в вашем случае factory.quote и QuoteFactory. Почему я не могу использовать имя factory.quote в контроллере?
Как обсуждалось выше в моем посте,
обычно мы общаемся с функциями службы/фабрики, которые заставляют говорить на стороне сервера код через http-вызовы или любые другие протоколы. Поэтому нам нужны модули фабрики/службы, которые помогут нам с их функциями, чтобы мы могли общаться с кодом на стороне сервера
надеюсь, это ясно
и придя к вашему второму вопросу
ngResource - это имя модуля, который предоставляет службы/функции, которые могут использоваться с их именами, но для использования функций ngResource (который является модулем) нам нужно импортировать его в наш основной модуль
поэтому мы помещаем его в [], т.е. список зависимостей нашего углового модуля
спасибо
В приведенном выше коде вы создаете отдельные модули для controllers
и factory
.
1) Почему я не могу использовать имя factory.quote в контроллере?
factory.quote
- это ваше имя модуля и содержит любое количество контроллеров и фабрик. В этом контроллере вы создали единую фабрику только в том коде, на котором это имя - QuoteFactory
. Вы собираетесь использовать эту фабрику в своем контроллере, а не в модуле. Таким образом, вы не можете использовать свое имя модуля здесь, вы должны использовать название фабрик, которые находятся внутри tyour module factory.quote
.
2) почему я не могу помещать 'ngResource' внутрь как angular.module('factory.quote', []). Factory ('ngResource', 'QuoteFactory', ['$ resource', function ($ resource)
angular.module('factory.quote',[]).factory('ngResource' ,'QuoteFactory', ['$resource', function ($resource)
- Что вы здесь делаете? Вы пытаетесь создать фабрику с name ngResource
? Этот код полностью запутан.
1.) factory.quote и QuoteFactory. Почему я не могу использовать имя factory.quote в контроллере?
'factory.quote'
: это имя модуля. Использование, когда вы получили другой модуль (например, 'app'
), хотите использовать то, что доступно в 'factory.qoute'
// Here you are telling 'app' to load module 'factory.qoute'
angular.module('app', ['factory.qoute'])
'QuoteFactory'
- это заводское имя, доступное внутри модуля 'factory.qoute'
.// Here you are telling 'app' to load module 'factory.qoute'
angular.module('app', ['factory.qoute'])
// Here you are using 'QuoteFactory' which is the content of 'factory.qoute'.
.controller('QuoteController', ['$scope', 'QuoteFactory', function ($scope, QuoteFactory) {
$scope.quote = QuoteFactory.query();
}]);
=> Фактически " factory.qoute " и " QuoteFactory" - это имя 2-х разностных вещей. Это как машина с именем factory.qoute имеет механизм с именем QuoteFactory.
Это похоже на клавиатуру. И когда вы хотите использовать кнопку [Enter]
. Вы не подключаете кнопку [Enter]
к компьютеру. Но вам нужно будет подключить целую клавиатуру к компьютеру.
2.) почему я не могу поставить 'ngResource' внутри как angular.module('factory.quote', []). Factory ('ngResource', 'QuoteFactory', ['$ resource', function ($ resource)
Подобный ответ для первого вопроса. 'ngResource'
- это модуль, вы не используете его на уровне механизма.
Это похоже: вы не подключаете клавиатуру к монитору, а на свой компьютер.