AngularJS - 以角度声明服务的不同方式有哪些主要区别?

Geo*_*lov 3 angularjs angularjs-directive

我正在开发一个angularJS应用程序,我正在努力坚持AngularJs中最有效和广泛接受的开发风格.目前,我正在使用这种方式声明我的服务:

app.factory('MyService', function() {
  /* ... */
  function doSomething(){
     console.log('I just did something');

  }

  function iAmNotVisible(){
      console.log('I am not accessible from the outside');
  }
  /* ... */

  return{
     doSomething: doSomething
  };
});
Run Code Online (Sandbox Code Playgroud)

但是,有很多例子,我不太确定要采用哪种设计风格.对服务有广泛了解的人能否解释为什么某种风格比另一种更具相关性?

除了限制对我服务中某些功能的访问之外,我在做什么有用吗?

Dun*_*can 6

我建议你在角度种子应用程序中进行布局,factory或者service角度种子应用程序中进行布局,除了应用程序烦人地仅valueservices.js样板中使用.但是,您可以调整它们用于控制器,指令和过滤器的布局.

'use strict';

/* Filters */

angular.module('myApp.filters', []).
  filter('interpolate', ['version', function(version) {
    return function(text) {
      return String(text).replace(/\%VERSION\%/mg, version);
    }
  }]);
Run Code Online (Sandbox Code Playgroud)

这意味着你要做的服务:

'use strict';

/* Services */

angular.module('myApp.filters', []).
  service('myservice', ['provider1', 'provider2', function(provider1, provider2) {
      this.foo = function() { 
          return 'foo'; 
      };
  }]).
  factory('myfactoryprovider', ['myservice', function(myservice) {
       return "whatever";
  }]);
Run Code Online (Sandbox Code Playgroud)

这比您绝对需要的更多样板,但它是安全的缩小并保持您的名称空间清洁.

不是所有你所要做的就是决定哪些const,value,factory或者service是最合适的.service如果要创建单个对象,请使用它:它被作为构造函数调用,因此您只需分配任何方法,this并且所有方法都将共享同一个对象.使用factory,如果你想在一个对象是否被创建,虽然它仍然只调用一次完全控制.使用value返回一个简单的值,使用const你可以中使用的值config.