ajax页面加载后重新加载angularjs指令?
问题描述:
我的基本的HTML是这样的:ajax页面加载后重新加载angularjs指令?
在主页上,我点击导航到另一个网页,其中只是改变了使用jQuery的#page_content的内容,总之是这样的:
gl.prototype.pageNav = function(page) {
$.ajax({
url: page,
success: function (data) {
$('#page_content').html(data);
}
});
}
在一个子页面上,我使用了一个角度指令:
<div id="awesomeSubPage" ng-my-sub-directive></div>
但是,看起来指令不会在ajax页面导航之后调用,它不被调用,如果我直接到页面,如:site.com/myApp/awesomeSubPage
的指令的代码:
myApp.controller('ContentCtrl', function($scope) {
// commented out
}.directive('ngMySubDirective', function() {
return {
link: function(scope, elem, attrs) {
elem.on('load', function() {
console.log('Run ngMySubDirective postMessage');
});
}
}
});
任何想法?
答
你有使用jQuery来改变内容的特殊原因吗?如果你正在创建一个AngularJs应用程序,那么你可以使用Angularjs Routing模块来显示不同的视图。
指令在你的情况下不起作用的原因是,通过使用jQuery,你不在“Angular世界”。所以Angular不知道内容已经改变。如果您真的需要,可以拨打$scope.$apply
。你也可以更换呼叫$.ajax
使用$http
呼叫提到here
这是我们曾用jQuery完成,并已开始添加角,但需要一段时间才能够完全删除的jQuery的东西(很多的ZF2应用依赖关系等) – dan2k3k4 2014-10-29 16:01:08
已更新的答案。如果可能,请仅替换ajax调用。如果这是不可能的,那么调用$ scope。$在ajax调用后应用自己。 – codemonkey 2014-10-29 16:08:39
当我尝试用'$ http'替换'$ .ajax'时 - 我得到'$ http未定义' - 我如何'添加角度'到我的自定义JS中?由于我们有一个主要是jQuery的文件,现在是处理angularjs的另一个文件,我需要先调用应用程序名称吗?像'myApp。$ http'? – dan2k3k4 2014-10-30 08:22:29