Смотрите ng-модель в ng-bind-html, используя AngularJs
Вот моя разметка
<div ng-app="myApp" ng-controller="myCtrl">
<input type="text" ng-model="name">
<p ng-bind-html="myText|unsafe"></p>
</div>
Я использую этот код
var app = angular.module("myApp", ['ngSanitize']);
app.controller("myCtrl", function($scope) {
$scope.myText = "My name is: <h1>{{name}}</h1>";
$scope.name="Habib";
});
app.filter('unsafe', function ($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
});
Выход:
Меня зовут: {{}}
Желаемый результат:
Меня зовут: Хабиб
Я хочу, чтобы это также отражало значение из текстового поля.
1 ответ
Решение
РЕДАКТИРОВАТЬ
Причина, по которой у вас возникли проблемы с получением $scope.name
связано, потому что ng-bind-html
не привязывает этот HTML к текущей области. Вы можете использовать директиву, чтобы исправить это. Вот ответ, который решает вашу проблему.
Вот плункер, который добавляет директиву и показывает поведение, которое вы ищете.
Вот директива, которая была добавлена для решения вашей проблемы:
app.directive('compileTemplate', function($compile, $parse){
return {
link: function(scope, element, attr){
var parsed = $parse(attr.ngBindHtml);
function getStringValue() {
return (parsed(scope) || '').toString();
}
// Recompile if the template changes
scope.$watch(getStringValue, function() {
// The -9999 makes it skip directives
// so that we do not recompile ourselves
$compile(element, null, -9999)(scope);
});
}
}
});
Вы должны объявить $scope.name="Habib"
перед myText
переменная области видимости
var app = angular.module("myApp", ['ngSanitize']);
app.controller("myCtrl", function($scope) {
$scope.name="Habib";
$scope.myText = "My name is: <h1>{{name}}</h1>";
});
app.filter('unsafe', function ($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
});