【问题标题】:Angular load custom controller角负载自定义控制器
【发布时间】:2014-09-30 11:15:13
【问题描述】:

是否可以加载一个自定义控制器,在 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
                    });

    });

【问题讨论】:

    标签: javascript angularjs controller angularjs-directive


    【解决方案1】:

    使用 require 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;
    });
    

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

    【讨论】:

    【解决方案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';  
    )()
    

    【讨论】:

    • 这正是我需要的,但可能代码中存在一些错误。您能否提供创建一个工作小提琴?非常感谢
    • 修复了代码,但我无法在小提琴上重现,没有文件系统。
    • ..它还不起作用,我的主项目上的错误是一样的。 plnkr.co/edit/RfRFPq2OVNr5I6iGVtdq?p=preview
    • 今天晚些时候,我在本地进行,并为您提供存储库的链接。
    • 你应该尝试使用 plunker
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      controller("controllerName",{$scope : scope}); // 这行很重要

      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        相关资源
        最近更新 更多