创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'}); }]);
我想要一个HomeCtrl
, AdminCtrl
和MainAppCtrl
通用的函数。
我应该怎么做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'); } } });