繁体   English   中英

动态加载角度控制器

[英]Dynamic loading Angular Controller

我试图使用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');
    });

我通过使用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以在进入特定状态时加载控制器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM