在 AngularJS 中将服务功能与 ng-bind-html 结合使用
use service function with ng-bind-html in AngularJS
我正在尝试使用在 AngularJS 服务中定义的名为 highlightReview
的转换函数,其属性为 ng-bind-html
但我可以'让它发挥作用。
请参阅下面的示例:
function myReputationSrvc($http, $q, $log, $sce) {
this.highlightReview = function(text) {
return $sce.trustAsHtml(text);
}
}
然后在 HTML 中调用该函数,如下所示:
<span ng-bind-html = " MyReputationSrvc.highlightReview(review.positiveText) "> </span>
没有调用任何东西,也没有抛出任何错误,似乎 ng-bind-html
只使用 $scope
上下文中的函数或变量,因为如果我将函数移动到 $scope
然后用 ng-bind-html = "highlightReview(review.positiveText)"
调用它工作正常。
有没有办法使用服务中的功能? 我把这个功能放在服务中,因为我想在多个控制器之间共享这个功能。
AngularJS 版本为:1.6.5 .
您需要将服务注入您的控制器并将函数放在控制器中,您不能直接从模板调用服务函数。
或者您可以使用自己的过滤器来完成这项工作,
.filter('mysce',function($http, $q, $log, $sce){
return $sce.trustAsHtml(text);
});
<span ng-bind-html = "review.positiveText | mysce"> </span>
如果你想让这个变得通用,而不是使用服务,你可以使用 filter
.filter('convertHtml',function($sce){
return function(text){
return $sce.trustAsHtml(text);
}
})
<span ng-bind-html = "review.positiveText | convertHtml "> </span>
来自 AngularJS 文档:https://docs.angularjs.org/api/ng/directive/ngBindHtml
如果您将 ngSanitize
注入到您正在使用的模块中,您只需使用 ng-bind-html
传递一个值为 HTML.
的字符串参数
你能看看这个吗plnkr as you have a example code snippet I have with that plunker link
示例代码:
app.controller('MainCtrl', ['$scope', 'MyReputationSrvc', function($scope, MyReputationSrvc) {
$scope.positiveText = "Hello </br> <b>World</b>";
$scope.MyReputation = function(repText){
return MyReputationSrvc.highlightReview(repText);
};
}]);
我正在尝试使用在 AngularJS 服务中定义的名为 highlightReview
的转换函数,其属性为 ng-bind-html
但我可以'让它发挥作用。
请参阅下面的示例:
function myReputationSrvc($http, $q, $log, $sce) {
this.highlightReview = function(text) {
return $sce.trustAsHtml(text);
}
}
然后在 HTML 中调用该函数,如下所示:
<span ng-bind-html = " MyReputationSrvc.highlightReview(review.positiveText) "> </span>
没有调用任何东西,也没有抛出任何错误,似乎 ng-bind-html
只使用 $scope
上下文中的函数或变量,因为如果我将函数移动到 $scope
然后用 ng-bind-html = "highlightReview(review.positiveText)"
调用它工作正常。
有没有办法使用服务中的功能? 我把这个功能放在服务中,因为我想在多个控制器之间共享这个功能。
AngularJS 版本为:1.6.5 .
您需要将服务注入您的控制器并将函数放在控制器中,您不能直接从模板调用服务函数。
或者您可以使用自己的过滤器来完成这项工作,
.filter('mysce',function($http, $q, $log, $sce){
return $sce.trustAsHtml(text);
});
<span ng-bind-html = "review.positiveText | mysce"> </span>
如果你想让这个变得通用,而不是使用服务,你可以使用 filter
.filter('convertHtml',function($sce){
return function(text){
return $sce.trustAsHtml(text);
}
})
<span ng-bind-html = "review.positiveText | convertHtml "> </span>
来自 AngularJS 文档:https://docs.angularjs.org/api/ng/directive/ngBindHtml
如果您将 ngSanitize
注入到您正在使用的模块中,您只需使用 ng-bind-html
传递一个值为 HTML.
你能看看这个吗plnkr as you have a example code snippet I have with that plunker link
示例代码:
app.controller('MainCtrl', ['$scope', 'MyReputationSrvc', function($scope, MyReputationSrvc) {
$scope.positiveText = "Hello </br> <b>World</b>";
$scope.MyReputation = function(repText){
return MyReputationSrvc.highlightReview(repText);
};
}]);