创建通用控制器功能
我如何创建某种可以从我的所有控制器访问的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
是什么),在AngularJS中有三种注入依赖关系的方法(定义通用代码):
我不会谈论提供者,因为这是一种更费力的依赖注入方法。 但是,这个页面很好地解释了它们的工作方式。
从技术上讲, 服务和工厂用于同样的事情。 事实证明,服务是构造函数,而工厂则不是。
来自这篇文章:
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');
}
}
});
链接地址: http://www.djcxy.com/p/2175.html