ng-bind-html 不适用于我的 $scope.variable
ng-bind-html not working with my $scope.variable
我正在尝试使用 ng-bind-html 添加动态 HTML 之类的内容,但它不适用于 $scope 变量
这是我的 Angular 代码
1)我的控制器
$scope.name = "Parshuram"
$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml("<div>{{name}}</div>");
而且我的字符串是动态的
"<div><table class=" + "\"table table - bordered table - responsive table - hover add - lineheight table_scroll\"" + "><thead><tr><td>Name</td><td>Age</td></tr></thead><tbody><tr ng-repeat=" + "\"tr in dyna\"" + "><td>{{tr.name}}</td><td>{{tr.age}}</td></tr></tbody></table></div>"
所以我不能用 $scope
替换每个变量
2)- 我的 HTML
<div ng-app="mymodule" ng-controller="myModuleController">
<div ng-bind-html="thisCanBeusedInsideNgBindHtml"></div>
</div>
我得到了这个输出
{{name}}
我的预期输出是
Parshuram
谁能帮我解决这个问题,$sce 不绑定作用域变量吗?? ..
ng-bind-html
就像罐子上说的那样:它绑定 html。它不会将 angular 模板代码绑定到您的 dom.
您需要这样做:
$scope.thisCanBeusedInsideNgBindHtml =
$sce.trustAsHtml("<div>"+$sanitize(name)+"</div>");
为此,您需要包含 javascript angular-sanitize.js
中的模块 ngSanitize
。参见 https://docs.angularjs.org/api/ngSanitize
如果您想插入一些包含 angular 指令的 html,那么您应该编写自己的自定义指令来执行此操作。
在你的 html 中使用
{{姓名}}
{{var}} 表示法将在 HTML 代码中用于评估该变量。
我在这里创建了一个工作 plnkr:https://plnkr.co/edit/uOdbHjv1B7fr0Ra1kXI3?p=preview
问题是 ng-bind-html 没有绑定到范围。
你应该手动编译内容。
一个有效且可重复使用的解决方案应该是创建一个指令,而不使用任何外部模块。
function compileTemplate($compile, $parse){
return {
link: function(scope, element, attr){
var parsed = $parse(attr.ngBindHtml);
function getStringValue() { return (parsed(scope) || '').toString(); }
scope.$watch(getStringValue, function() {
$compile(element, null, -9999)(scope);
});
}
}
}
<div ng-app="mymodule" ng-controller="myModuleController">
<div ng-bind-html="thisCanBeusedInsideNgBindHtml" compile-template></div>
</div>
你可以这样做:
$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml('<div ng-bind="name"></div>');
对不起,我再做一个回答。
如果你有
$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml("<div>{{name}}</div>");
那你可以做
var str = "<div>{{name}}</div>";
var output = str.replace('{{name}}', $scope.name);
这似乎是唯一的选择。
我正在尝试使用 ng-bind-html 添加动态 HTML 之类的内容,但它不适用于 $scope 变量
这是我的 Angular 代码
1)我的控制器
$scope.name = "Parshuram"
$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml("<div>{{name}}</div>");
而且我的字符串是动态的
"<div><table class=" + "\"table table - bordered table - responsive table - hover add - lineheight table_scroll\"" + "><thead><tr><td>Name</td><td>Age</td></tr></thead><tbody><tr ng-repeat=" + "\"tr in dyna\"" + "><td>{{tr.name}}</td><td>{{tr.age}}</td></tr></tbody></table></div>"
所以我不能用 $scope
替换每个变量2)- 我的 HTML
<div ng-app="mymodule" ng-controller="myModuleController">
<div ng-bind-html="thisCanBeusedInsideNgBindHtml"></div>
</div>
我得到了这个输出
{{name}}
我的预期输出是
Parshuram
谁能帮我解决这个问题,$sce 不绑定作用域变量吗?? ..
ng-bind-html
就像罐子上说的那样:它绑定 html。它不会将 angular 模板代码绑定到您的 dom.
您需要这样做:
$scope.thisCanBeusedInsideNgBindHtml =
$sce.trustAsHtml("<div>"+$sanitize(name)+"</div>");
为此,您需要包含 javascript angular-sanitize.js
中的模块 ngSanitize
。参见 https://docs.angularjs.org/api/ngSanitize
如果您想插入一些包含 angular 指令的 html,那么您应该编写自己的自定义指令来执行此操作。
在你的 html 中使用 {{姓名}} {{var}} 表示法将在 HTML 代码中用于评估该变量。
我在这里创建了一个工作 plnkr:https://plnkr.co/edit/uOdbHjv1B7fr0Ra1kXI3?p=preview
问题是 ng-bind-html 没有绑定到范围。 你应该手动编译内容。
一个有效且可重复使用的解决方案应该是创建一个指令,而不使用任何外部模块。
function compileTemplate($compile, $parse){
return {
link: function(scope, element, attr){
var parsed = $parse(attr.ngBindHtml);
function getStringValue() { return (parsed(scope) || '').toString(); }
scope.$watch(getStringValue, function() {
$compile(element, null, -9999)(scope);
});
}
}
}
<div ng-app="mymodule" ng-controller="myModuleController">
<div ng-bind-html="thisCanBeusedInsideNgBindHtml" compile-template></div>
</div>
你可以这样做:
$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml('<div ng-bind="name"></div>');
对不起,我再做一个回答。
如果你有
$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml("<div>{{name}}</div>");
那你可以做
var str = "<div>{{name}}</div>";
var output = str.replace('{{name}}', $scope.name);
这似乎是唯一的选择。