角度加载自定义控制器

时间:2014-09-30 11:15:14

标签: javascript angularjs controller angularjs-directive

是否可以在angularjs中加载指定文件名的自定义控制器?

这样的事情:

 var demo = angular.module('demo', ['ngRoute', 'ui.bootstrap', 'demo.filters', 'demo.services', 'demo.directives', 'demo.controllers'])

    .config(['$routeProvider', function ($routeProvider) {


        $routeProvider.when('/custom', 
                   {
                      templateUrl: 'partials/custom.html', 
                      controller:   customController.js
                    });

    });

4 个答案:

答案 0 :(得分:3)

通过需要js的方式,你需要像这样设置你的应用程序:

var demo = angular.module('demo', ['ngRoute', 'demo.filters', 'demo.services', 'demo.directives']);

demo.config(['$routeProvider',
  function($routeProvider) {
    var _routes = ['/custom', '/custom2'];
    _routes.map(function(route) {
      var _cntrlName = route.slice(1, route.length);
      require([_cntrlName + "Controller"], function(controller) {
        $routeProvider.when(route, {
          templateUrl: '.' + route + '.html',
          controller: controller
        });
      });
    });
  }
]);

您的控制器代码必须如下所示:

define(function(require, exports, module) {
  function controller($scope) {
    $scope.testvar = "test 1!";
  }
  module.exports = controller;
});

这是一个演示此http://plnkr.co/edit/N5fE5rezf6eM8jDIz23w?p=info

的傻瓜

答案 1 :(得分:2)

Angular无法加载JS文件,但您可以使用RequireJS

执行此操作
var demo = angular.module('demo', ['ngRoute', 'ui.bootstrap', 'demo.filters', 'demo.services',     'demo.directives'])

demo.config(['$routeProvider', function ($routeProvider) {
    var _routes = ['/custom', '/somepage']

    _routes.map(function(route){
        var _cntrlName = route.slice(1, route.length);
        $routeProvider.when(route,{
             templateUrl: 'partials' + route;
             controller: require('./' + _cntrlName + 'Controller.js');
        })     
    })  
});

控制器文件:

(function(){
   function customController($scope){
       console.log($scope);   
   };
   return 'customController';  
)()

答案 2 :(得分:0)

而不是指定文件放置控制器的名称。 但是,您应该从部分中删除ng-controller指令。

答案 3 :(得分:0)

是。您可以将其他控制器范围加载到不同的控制器中。

示例代码
var mode = angular.module()。config(function(){

controller(“controllerName”,{$ scope:scope}); //此行非常重要

});