1

我最近开始使用 angularjs。但它的模块概念让我感到困惑。

在其中一个角度教程中,有以下代码:

'use strict';

/* Services */

var phonecatServices = angular.module('phonecatServices', ['ngResource']);

//this line's added by me
phonecatServices.constant('SomeConstant', 123);

phonecatServices.factory('Phone', ['$resource',
  function($resource){
    return $resource('phones/:phoneId.json', {}, {
      query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
    });
  }]);

为什么 angularjs 需要像常量或工厂这样的辅助函数,而它可以以类似于 nodejs 的方式定义模块,而后者更干净?我对这种方法有什么优势感到困惑。

var $resource = require('$resource');

var SomeConstant = 123;

var Phone = $resource('phones/:phoneId.json', {}, {
        query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
    });
};

exports.SomeConstant = SomeConstant;
exports.Phone = Phone;
4

1 回答 1

0

答案似乎集中在 Angular 的依赖注入上。

考虑angular.moduleapi所说的那样,一种创建/注册或检索模块的全局方法。需要以这种方式创建一个模块,以便在引导$injector时可以找到它,它是一个获取已注册模块名称列表的函数。

我不会将该factory函数视为“助手”,而是实际上是一种向 Angular js 的依赖注入指定应该如何创建服务的方式。或者正如依赖注入指南所说的那样——我们正在“教” $injector 如何创建服务:

// Provide the wiring information in a module
angular.module('myModule', []).

  // Teach the injector how to build a 'greeter'
  // Notice that greeter itself is dependent on '$window'
  factory('greeter', function($window) {
    // This is a factory function, and is responsible for 
    // creating the 'greet' service.
    return {
      greet: function(text) {
        $window.alert(text);
      }
    };
  });

// New injector is created from the module. 
// (This is usually done automatically by angular bootstrap)
var injector = angular.injector(['myModule', 'ng']);

// Request any dependency from the injector
var greeter = injector.get('greeter'); 

该指南还提醒我们,在这里,注入器是直接从模块创建的,但通常 Angular 的引导程序会为我们处理这些。

因此,简而言之,angular.module告诉 Angular 如何解析模块(它通过 来完成$injector),并factory告诉 Angular 如何在需要时制作它们或它们。相比之下,Node 的模块与文件是一对一的映射,并以这种方式解析和制作。

于 2014-02-13T05:13:33.103 回答