我們有一個應用程序,它是一些混合角和一些香草javascript。我們正在嘗試將它轉換爲角度。ng控制器在DOM準備好之後不會被Angular拾起
我們現在面臨的問題是,在應用程序的一部分中,HTML模板通過ajax調用被注入到DOM中。這個網站包含
ng-controller="MyController"
但角度不連線該控制器,當我們把一個的console.log在控制器上,它從來沒有來了。那麼,如果通過非角度代碼將其注入到DOM中,我們如何告知角度來查找此控制器。
我們有一個應用程序,它是一些混合角和一些香草javascript。我們正在嘗試將它轉換爲角度。ng控制器在DOM準備好之後不會被Angular拾起
我們現在面臨的問題是,在應用程序的一部分中,HTML模板通過ajax調用被注入到DOM中。這個網站包含
ng-controller="MyController"
但角度不連線該控制器,當我們把一個的console.log在控制器上,它從來沒有來了。那麼,如果通過非角度代碼將其注入到DOM中,我們如何告知角度來查找此控制器。
你會想要使用$compile
允許角度爲dynamically compile這個HTML模板。 $watch
將允許您在每次AJAX返回的字符串更改時編譯此模板。
HTML
<html ng-app="app">
<body>
<h1>AJAX-provided HTML into Angular-rendered template</h1>
<div ng-controller="MyController">
<div dynamic="html"></div>
</div>
</body>
</html>
的JavaScript
var app = angular.module('app', []);
app.directive('dynamic', function ($compile) {
return {
restrict: 'A',
replace: true,
link: function (scope, ele, attrs) {
scope.$watch(attrs.dynamic, function(html) {
ele.html(html);
$compile(ele.contents())(scope);
});
}
};
});
function MyController($scope) {
$scope.updateHtml = function(html){
$scope.html = "";
}
}
要強制jQuery來更新角度的代碼,你可以嘗試調用該DOM元素的角度對象(然後訪問控制器對於該對象):
jQuery
$.ajax(href, {
success: function(data){
var element = angular.element($('#myElement'));
var scope = element.scope();
scope.$apply(function(){
scope.updateHtml(data);
});
}
});
它是如何注入的?我認爲你必須首先編譯它,以便角度知道waddup – devqon
問題是HTML被非角度代碼注入到DOM中。普通的jQuery ajax。所以這個HTML只是一個div與ng-controller =「MyController」 – ecorvo
只需$ html將它添加到DOM –