创建通用控制器功能

我如何创建某种可以从我的所有控制器访问的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是什么),在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

    上一篇: Creating common controller functions

    下一篇: AngularJS : When to use service instead of factory