当前位置: 首页 > 面试题库 >

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

李森
2023-03-14
问题内容

我一直看到在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";
}

问题答案:

第一个将污染全局名称空间,从长远来看,这不是您想要的。

function ExampleCtrl($scope){
    $scope.data = "some data";
}

第二个将控制器的作用域限定为该模块实例。它也可以注射。最好还是使用数组符号(如下所示),因为这会在最小化后继续存在。

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

(角度)服务与工厂之间的差异似乎很小。服务包装了工厂,工厂使用$
injector.instantiate
初始化服务。



 类似资料:
  • 问题内容: 我已经阅读了几篇有关angularjs实体正确用法的文章:服务,工厂,控制器和指令。 我特别关心的是控制器和服务的比较。但是,没有一个帖子告诉我什么是控制器可以执行服务不能执行的操作,反之亦然。 可以列出它吗?或者仅仅是在angular的用法上规范? 问题答案: 控制器 通常用于绑定视图。控制器管理视图的生命周期,应将其视为视图控制器。将为视图的每个实例创建一个新的控制器,这意味着,如

  • 问题内容: 使用语法时如何订阅属性更改? 问题答案: 只需绑定相关上下文即可。 示例:http://jsbin.com/yinadoce/1/edit 更新: Bogdan Gersak的答案实际上是等效的,两个答案都尝试在正确的上下文中进行绑定。但是,我发现他的答案更干净。 话虽如此,首先,您必须了解其背后的基本思想。 更新2: 对于那些使用ES6的人,通过使用它们可以获得具有正确上下文OOTB

  • 我的控制器 这是我的控制器测试用例 我正在将User对象转换为string并将其发布到控制器方法。我正在尝试模拟userService.validateUser()将返回新的空User对象的服务方法。由于发布到service方法的对象和控制器接收到的对象不同,所以service返回null。如何让service方法返回空用户对象?

  • 问题内容: 我有三个非常相似的控制器。我想要一个控制器,这三个控制器可以扩展并共享其功能。 问题答案: 也许 您 不扩展控制器,但是可以扩展控制器或将单个控制器混合为多个控制器。 创建父控制器后,其中的逻辑也将执行。有关更多信息,请参见$ controller(),但仅需要传递值。所有其他值将正常注入。 @mwarren ,Angular依赖注入自动解决了您的顾虑。您所需要做的就是注入$ scop

  • 我明白,对于处理器,我只需在文件夹下的中编写代码,然后从中创建一个nar文件。但是在控制器服务的情况下,我有4个文件夹生成。我可以看到两个java文件。 > 显示在文件夹下 显示在文件夹下 现在,为什么在自定义控制器服务的情况下生成两个java文件,而在自定义处理器的情况下只生成一个java文件。另外,由于我试图模仿服务,其中的java文件中有两个我应该复制服务的原始源代码。 请从头开始指导我创建

  • 问题内容: 我已经用AngularJS编写了一个服务,但是我无法使其与角度种子处理方式一起使用。 控制器代码如下: 请注意,注释掉的部分工作正常,但我想像(推荐的)第二种方式来处理它。 我得到的错误是照片是未定义的,所以我的猜测是我传递(注入)它的方法是错误的,但是我找不到正确的方法 问题答案: 您需要定义服务: 一些参考: http://docs.angularjs.org/api/angula