我不断看到在AngularJS中创建控制器和服务的不同示例,我感到困惑,有人能给我解释一下这两种方法的区别吗?
app.service('reverseService', function() {
this.reverse = function(name) {
return name.split("").reverse().join("");
};
});
app.factory('reverseService', function() {
return {
reverse : function(name) {
return name.split("").reverse().join("");
}
}
});
还有一个控制器示例:
function ExampleCtrl($scope) {
$scope.data = "some data";
}
app.controller("ExampleCtrl", function($scope) {
$scope.data = "some data";
}
发布于 2013-01-07 01:24:05
第一个会污染global namespace,从长远来看,这不是您想要的。
function ExampleCtrl($scope){
$scope.data = "some data";
}
第二个将Controller的作用域设置为该模块实例。这也使得它成为injectable。更好的方法是使用数组表示法(如下所示),因为这将经受住缩小。
app.controller("ExampleCtrl", ['$scope', function($scope){
$scope.data = "some data";
}]);
(angular)服务和工厂之间的区别似乎很小。服务包装了一个工厂,工厂使用$injector.instantiate来初始化服务。
发布于 2015-01-12 21:33:17
我首选的创建控制器和指令的方法如下:
/**
* SomeCoolModule.controller.js
*/
(function(){
'use strict';
angular.module('app.modals.SomeCoolModule').controller('SomeCoolModuleController', SomeCoolModuleController);
AddFlowCurveModalController.$inject =
[
'$scope',
'$filter',
'$log',
];
function SomeCoolModuleController($scope, $filter, $log) {
/* controller body goes here */
}
})();
PS:由于IIFE,上面没有发生全局命名空间污染。
https://stackoverflow.com/questions/14184656
复制相似问题