Я новичок в angularjs. В моем проекте я получаю HTML-файл в качестве ответа HTTP. ng-bind-html работает с html-кодом. Но код angularjs внутри html не компилируется. Я пробовал решения с компиляцией $, ничего не работает. Пожалуйста, предложите хорошее решение для этого.
Допустим, у нас есть пример кода, как это:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>TEST</title>
<script src="angular.js"></script>
</head>
<body ng-app="myapp">
<div ng-controller="myController">
<p compile="htmlresponse"></p>
</div>
<script>
var app = angular.module('myapp', []);
app.controller('myController', function ($rootScope,$sce) {
$http.get(,,,,).success(function(data){
$rootScope.htmlResponse=$sce.trustAsHtml(data);
}
});
app.directive('compile', function($compile) {
// directive factory creates a link function
return function(scope, element, attrs) {
scope.$watch(
function(scope) {
return scope.$eval(attrs.compile);
},
function(htmlResponse) {
element.html(htmlResponse);
$compile(element.contents())(scope);
}
);
};
});
</script>
</body>
</html>
Это отлично работает, если я получаю только HTML, как ответ. Когда я получаю HTML с angularjs (который включает app.module, app.controller, app.directives), обрабатывается только часть html. Пожалуйста, помогите мне в этом вопросе.
Вот мой образец ответа.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>TEST</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular-animate.min.js"></script>
</head>
<body ng-app="myapp">
<div ng-controller="myController">
{{name.myname}}
</div>
<script>
var app = angular.module('myapp', []);
app.controller('myController', function ($scope) {
$scope.name={};
$scope.name.myname = "stack";
});
</script>
</body>
</html>
Что вы подразумеваете под словом «он не компилируется»? Выполнен ли встроенный JavaScript? Вы не являетесь событием, использующим 'ng-bind-html' внутри образца кода, который вы предоставили. Из вопроса (как сейчас) мне непонятно, чего вы пытаетесь достичь. – Martin
Я также попробовал ng-bind-html. но ng-bind-html не компилирует javascript-код внутри html. Вот почему я пытаюсь с компиляцией $, так как многие предложили ее в stackoverflow. – sakthi
Вы ответ HTML должны быть фрагментом html. HTML и BODY являются специальными тегами, если они неуместны, они удаляются браузером. Также 'ng-app' может запускаться только один раз. После того, как Angular будет инициализирован, любое другое ng-приложение будет проигнорировано. То, что вы возвращаете, похоже, должно быть помещено в iframe, хотя это означает, что он не сможет общаться с другим приложением на странице. – Enzey