Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了AngularJS动态加载控制器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我读了很多关于lazzy加载,但是我使用$routeProvider时面临一个问题.

我的目标是加载一个包含控制器的javascript文件,并向之前加载的控制器添加路由.

要加载我的javascript文件内容

angular.module('demoApp.modules').controller('MouseTESTCtrlA',['$scope',function ($scope) {
    console.log("MouseTESTCtrlA");
    $scope.name = "MouseTESTCtrlA";
}]);

调用角度引导程序时,不包括文件.这意味着,我必须加载文件并创建一个到该控制器的路由.

首先,我开始编写一个解析函数,它必须加载Javascript文件.但是在路由声明中声明我的controller参数给了我一个错误

这是我试图设置的电话:

demoApp.routeProvider.when(module.action,{templateUrl: module.template,controller: module.controller,resolve : {deps: function() /*load JS file*/} });

从我读到的,控制器参数应该是已注册的控制器

所以我写了一个工厂,应该可以加载我的文件,然后(承诺样式!)我应该尝试声明一个新的路由.

它给了我下面的东西,其中依赖关系是一组javascript文件的加载路径:

用法

ScriptLoader.load(module.dependencies).then(function () {
    demoApp.routeProvider.when(module.action,{templateUrl: 'my-template',controller: module.controller});
});

脚本加载器

angular.module('demoApp.services').factory('ScriptLoader',['$q','$rootScope',function ($q,$rootScopE) {
        return {
            load: function (dependencies)
            {
                var deferred = $q.defer();
                require(dependencies,function () {
                    $rootScope.$apply(function () {
                        deferred.resolve();
                    });
                });
                return deferred.promise;
            }
        }
    }]);

问题

我仍然有这个javascript错误“’MouseTESTCtrlA’不是一个功能,未定义”这意味着Angular无法解析为“注册控制器”的MouseTESTCtrlA.

有人可以帮我吗?

重新阅读本文 @L_419_0@建议在Angular App中保留$contentProvider实例.

我在我的app.js中提出了这个代码

demoApp.config(function ($controllerProvider) {
     demoApp.controller = $controllerProvider.register;
});

它使我能够按照预期在外部的javascript文件中编写我的控制器:

angular.module("demoApp").controller('MouseTESTCtrlA',fn);

希望这可以帮助!

大佬总结

以上是大佬教程为你收集整理的AngularJS动态加载控制器全部内容,希望文章能够帮你解决AngularJS动态加载控制器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。