在大规模应用程序中,我们的Web应用程序可能会组织成单独的部分页面,以增加应用程序的模块性。在某些情况下,使用Angular $ http.get或JQuery $ .load编译通过XHR或Ajax请求加载的部分页面将引入错误。使用Angular加载部分页面并编译控制器
以我的场景为例,我恰好使用Kohana PHP框架,所以我可以在服务器级别控制我的Web应用程序的模块性。像往常一样,所有的模板和页面都被分离到视图中,将所有的HTML,JS和CSS留在表示层上。
这将为我在客户端处理上实现Javascript MVW/MVC堆栈提供很大的灵活性,因为我的web应用程序严重依赖AJAX请求从后端应用程序获取数据。在我的情况下,使用AngularJS和下面是一个简单的伪如何从模型呈现给客户端的数据。
Kohana的型号> Kohana的控制器>的Kohana视图> XHR> JQuery的\角> DOM
我的一个在我的应用程序部分,真正给我撞,让我喝代谢喝几瓶解决应用程序。在哪里我有一个模式对话框,部分页面通过XHR从服务器加载并将其连接到选定的DOM。
问题是,当Angular尝试编译部分页面,当它发现ng-controller指令时,它将查找引用已处理指令的函数。由于DOM解析器尚未评估控制器,因此产生错误。但是,当您在加载部分页面之前在应用程序的某个地方预先放置函数时,一切正常。下面是我如何设置一个Dialog服务的例子,当我点击上述链接时,会从链接指令中调用它。
var dialogService = angular.module('dialog.service', []);
dialogService.factory('Dialog', function($http,$compile){
var dialogService = {};
dialogService.load = function(url, scope){
$("#dialog:ui-dialog").dialog("destroy");
$("#dialog").attr('title','Atlantis');
$http.get(url).success(function (data) {
html = $compile(data)(scope);
$('#dialog-content').html(html);
$("#dialog").dialog({
width: '600px',
buttons: {
"Ok": function() {
$(this).dialog("close");
return true;
},
},
close: function(){
if (typeof (onClose) == 'function') { onClose(); }
},
});
});
}
return dialogService;
});
经过一番研究,我发现了一些解决方案,并与我的回答分享给我,像我这样的初学者。 (对不起我的英语不好)。
我想使用这种方法,但它告诉我$编译没有定义,我是否需要添加别的东西? –
我需要知道你如何初始化AngularJS,你能分享到JsFiddle吗? – wajatimur
代码示例在网站中很清楚,使用 http://jsfiddle.net/9mPGB/ –