如何在页面上多次使用相同的控制器和相同的视图

时间:2016-02-29 13:43:35

标签: angularjs

我正在尝试创建一个单页应用程序,我想通过ajax加载屏幕(部分视图)。问题是用户想要多次打开同一个屏幕(在标签中)。我尝试在初始加载时加载控制器代码并通过AJAX加载我的屏幕(部分视图)。但是在加载屏幕(部分视图)时已经执行了控制器。

我想知道在加载局部视图后如何让控制器运行?

或者更好的是,如何解决这种情况,我想用不同的数据/状态多次加载相同的视图?

1 个答案:

答案 0 :(得分:0)

我找到了解决我遇到的问题的方法。我不确定这是否是最好的前进方式,但鉴于我目前对AngularJS的了解有限,这个解决方案是我最好的选择。如果有人能提出更好的解决方案,我全心全意。

我没有预先注册控制器,而是在请求视图时注册控制器。

另外,我将一个新的div添加到我想要显示视图的容器中。页面上有一些jQuery隐藏了其他视图,只显示当前视图。

第1步

$controllerProvider.register分配给App Scope上的变量

var myApp = angular.module("myApp", []);
angular.module("myApp").config(function ($controllerProvider) {
                   myApp.registerCtrl = $controllerProvider.register;
               });

第2步

在我必须动态加载视图的函数中,我做了以下

$("#viewContainer").append($compile('<div ng-include="pageUrl"></div>')($scope));

上面的行添加了一个带有ng-include指令的div。它还编译指令。 pageUrl是我保留我要包含的视图的网址的地方。

第3步

在我必须加载的视图文件中,我包含了保存我的控制器的JavaScript文件。该文件的其余部分包含带指令的简单HTML。在JS文件中,我没有创建控制器,而是注册控制器,如

angular.module('myApp').registerCtrl("MyController", MyController);

我希望这对其他人有帮助。