我正在尝试创建一个单页应用程序,我想通过ajax加载屏幕(部分视图)。问题是用户想要多次打开同一个屏幕(在标签中)。我尝试在初始加载时加载控制器代码并通过AJAX加载我的屏幕(部分视图)。但是在加载屏幕(部分视图)时已经执行了控制器。
我想知道在加载局部视图后如何让控制器运行?
或者更好的是,如何解决这种情况,我想用不同的数据/状态多次加载相同的视图?
答案 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);
我希望这对其他人有帮助。