首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AngularJS -创建控制器和服务的不同方式,为什么?

AngularJS -创建控制器和服务的不同方式,为什么?
EN

Stack Overflow用户
提问于 2013-01-07 01:18:58
回答 2查看 9.2K关注 0票数 19

我不断看到在AngularJS中创建控制器和服务的不同示例,我感到困惑,有人能给我解释一下这两种方法的区别吗?

代码语言:javascript
复制
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("");
        }
    }
});

还有一个控制器示例:

代码语言:javascript
复制
function ExampleCtrl($scope) {
    $scope.data = "some data";
}

app.controller("ExampleCtrl", function($scope) {
    $scope.data = "some data";
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 01:24:05

第一个会污染global namespace,从长远来看,这不是您想要的。

代码语言:javascript
复制
function ExampleCtrl($scope){
    $scope.data = "some data";
}

第二个将Controller的作用域设置为该模块实例。这也使得它成为injectable。更好的方法是使用数组表示法(如下所示),因为这将经受住缩小。

代码语言:javascript
复制
app.controller("ExampleCtrl", ['$scope', function($scope){
    $scope.data = "some data";
}]);

(angular)服务和工厂之间的区别似乎很小。服务包装了一个工厂,工厂使用$injector.instantiate来初始化服务。

票数 20
EN

Stack Overflow用户

发布于 2015-01-12 21:33:17

我首选的创建控制器和指令的方法如下:

代码语言:javascript
复制
/**
* 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,上面没有发生全局命名空间污染。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14184656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档