ajax页面加载后重新加载angularjs指令?

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

+0

这是我们曾用jQuery完成,并已开始添加角,但需要一段时间才能够完全删除的jQuery的东西(很多的ZF2应用依赖关系等) – dan2k3k4 2014-10-29 16:01:08

+0

已更新的答案。如果可能,请仅替换ajax调用。如果这是不可能的,那么调用$ scope。$在ajax调用后应用自己。 – codemonkey 2014-10-29 16:08:39

+0

当我尝试用'$ http'替换'$ .ajax'时 - 我得到'$ http未定义' - 我如何'添加角度'到我的自定义JS中?由于我们有一个主要是jQuery的文件,现在是处理angularjs的另一个文件,我需要先调用应用程序名称吗?像'myApp。$ http'? – dan2k3k4 2014-10-30 08:22:29