将控制器的公共部分分成公共控制器

时间:2015-10-20 07:28:05

标签: angularjs routing angular-ui-router controllers

我正在使用带有uiRouter的AngularJS开发一个Web应用程序。我开发了如下路线配置:

(function () {

    'use strict';

    var module = angular.module('app', ['ngMaterial', 'ui.router']);

    function Config($urlRouterProvider, $stateProvider) {
        $urlRouterProvider.otherwise('/');

        $stateProvider.state('Home', {
            url: '/',
            templateUrl: 'Partials/homeview.html',
            controller: 'homeCtrl'
        }).state('Table', {
            url: '/tableview',
            templateUrl: 'Partials/tableview.html',
            controller: 'tableCtrl'
        }).state('List', {
            url: '/listview',
            templateUrl: 'Partials/listview.html',
            controller: 'listCtrl'
        }).state('New', {
            url: '/new',
            templateUrl: 'Partials/new.html',
            controller: 'newCtrl'
        }).state('Edit', {
            url: '/edit/:index',
            templateUrl: 'Partials/edit.html',
            controller: 'editCtrl'
        });
    }
    Config.$inject = ["$urlRouterProvider", "$stateProvider"];

    module.config(Config);
}());

某些控制器中的东西传递给视图代码是重复的,所以我想知道是否有办法将2个控制器同时传递给视图,或者是否有办法创建单独的文件使用复制控制器的特定部分,并将其作为依赖注入传递到所需的控制器中。

1 个答案:

答案 0 :(得分:1)

您无法将两个控制器链接到uiRouter路由。但您当然可以制作包含通用功能的服务或工厂。 (有关更多研究,请参阅angular.service vs angular.factory。)

var app = angular.module('app',[])
app.service('myFunctions',function() {
  this.addNumbers = function(a,b) {
    // calculate some stuff
    return a+b;
  }
}
app.controller('myController',function(myFunctions){
  myFunctions.addNumbers(2,2); // 4
})