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; 
+0

Угловые модули на самом деле не являются модулями AMD, они являются частью определения внутреннего углового каркаса для определения модуля, а второй, упомянутый в синтаксисе CommonJS, для определения модулей, которые обычно используются на стороне сервера, например Node.js –

ответ

0

Ответ кажется сосредоточенным вокруг угловой зависимости.

Рассмотрите angular.module как api, что означает глобальное средство для создания/регистрации или извлечения вашего модуля. Модуль должен быть создан таким образом, чтобы $injector, который является функцией, которая принимает список имен модулей, которые были зарегистрированы, может найти ее во время bootstrapping.

Я бы не считал функцию factory «помощником», но вместо этого на самом деле был способ указывать на инъекцию зависимости углового js, как предполагается создание службы. Или как dependency injection guide выразился - мы «учение» за $ форсунка, как создать службу:

// 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'); 

Руководство также напоминает нам о том, что здесь, инжектор создается непосредственно из модуля, но обычно Угловая'S загрузчик заботится об этом для нас.

Так, короче говоря, angular.module говорит Угловая, как разрешить модули (что он делает через $injector) и factory говорит Угловая, как сделать или их, когда они необходимы. Напротив, модули Node имеют взаимно однозначное сопоставление с файлами и разрешены и сделаны в this way.