创build通用控制器function

如何创build一些可以从我的所有控制器访问的utils bundle?

我在主模块中有这个路由代码:

'use strict'; angular.module('lpConnect', []). config(['$routeProvider', function($routeProvider) { $routeProvider. when('/home', {template: 'views/home.html', controller: HomeCtrl}). when('/admin', {template: 'views/admin.html', controller: AdminCtrl}). when('/connect', {template: 'views/fb_connect.html', controller: MainAppCtrl}). otherwise({redirectTo: '/connect'}); }]); 

我想要一个HomeCtrlAdminCtrlMainAppCtrl通用的函数。

我应该怎么做AngularJS?

定义公用代码的方法是通过服务。

你可以这样定义一个新的服务:

 .factory('CommonCode', function ($window) { var root = {}; root.show = function(msg){ $window.alert(msg); }; return root; }); 

在你的控制器,你会注入这个服务..就像这样

 function MainAppCtrl($scope,CommonCode) { $scope.alerter = CommonCode; $scope.alerter.show("Hello World"); } 

只需将CommonCode作为参数添加到您的控制器函数中即可。Angular会为您注入它(请参阅Dependancy Injection ..以了解此处发生了什么)。

只是为了更新以前的答案(它只是定义了什么factory ),有3种方法在AngularJS中注入依赖关系 (定义公共代码):

  • 供应商
  • 工厂
  • 服务

我不会谈论提供程序,因为这是一种更费力的dependency injection方法。 但是, 这个页面很好地解释了它们是如何工作的。


从技术上讲, 服务工厂是用于同样的事情。 事实certificate,一个服务是一个构造函数,而一个工厂则不是。

从这个职位 :

 module.service( 'serviceName', function ); 

serviceName声明为注入参数时,将为您提供该函数的一个实例

 module.factory( 'factoryName', function ); 

factoryName声明为注入参数时,将提供通过调用传递给module.factory 的函数引用返回的值


你可以使用你喜欢的,并获得相同的结果

这里有两个代码通过service先做完全相同的事情,然后是factory

服务语法

 app.service('MyService', function () { this.sayHello = function () { console.log('hello'); }; }); 

工厂语法

 app.factory('MyService', function () { return { sayHello: function () { console.log('hello'); } } });