动态加载角度控制器

时间:2017-06-11 15:16:02

标签: javascript angularjs

我正在尝试使用ocLazyLoad动态加载控制器:

$ocLazyLoad.load('./ctrls/login.js');

但是我得到这个错误说:

  

名称为' loginCtrl'的控制器没有注册。

angular.module('optimusApp')
    .controller('loginCtrl', function ($scope, $rootScope, $location, $http) {});

app.js

angular.module("optimusApp", ['ngRoute', 'oc.lazyLoad']);
angular.module('optimusApp')
    .controller('globalCtrl', function ($rootScope, $location, $http, $routeParams, $ocLazyLoad) {
        $ocLazyLoad.load('./ctrls/login.js');
    });

1 个答案:

答案 0 :(得分:0)

我使用ng-if

使其工作

<强> app.js

var optimusApp = angular.module("optimusApp", ["ngRoute", "oc.lazyLoad"])
    .controller("globalCtrl", function ($rootScope, $location, $http, $routeParams, $ocLazyLoad) {

    $ocLazyLoad.load("./js/app/login.js").then(function() {
         console.log("loginCtrl loaded");
         $rootScope.loginActive = true;
    }, function(e) {
         console.log("error");
    });
});

<强> login.js

optimusApp.controller('loginCtrl', function ($scope, $rootScope, $location, $http) {

});

<强> HTML

<div ng-if="loginActive" ng-controller="loginCtrl">


</div>

如果在加载JS之前 ng-controller 在页面中,基本上会出现“注册错误”。 所以ng-if是一个解决方案,或者我看到你有ngRoute。因此,您可以设置ocLazyLoad以在进入特定状态时加载控制器。