我有一个返回 HTML 的过滤器,但 Angular 没有正确显示它。我包含了 angular-sanitize.min.js,并在不同的地方尝试了 ng-bind-html 和 $sce。我知道我已经很接近了,但在这方面纠结了几天之后,我想我应该寻求一些专家的见解。一般来说,我对 Angular 和 javascript 还很陌生。感谢您的帮助。
证明我已 sanitizer
<script src="lib/angular/angular-sanitize.min.js"></script>
app.js -- 包括清理和过滤我正在使用
var myApp = angular.module('myApp', [
'ngRoute',
'clownfishControllers',
'ngSanitize'
]);
myApp.filter('fmtIt', function () {
return function (name) {
var parts = name.split(' "');
if (parts.length == 2) {
return "<i>".concat(parts[0], "</i>", ' "', parts[1]);
} else {
return "<i>".concat(parts[0], "</i>");
}
}
});
list.html -- 我在 html 文件中的两个例子
<h2 ng-bind-html="item.name | fmtIt"></h2> --strips off html in output
<h2>{{item.name | fmtIt }}</h2> --shows html tags in output
controllers.js——我尝试将 $sce 注入(inject)其中的 Controller 之一。
clownfishControllers.controller('ListCtrl', ['$scope', '$http', 'Parents', '$sce', function($scope, $http, Parents, $sce) {
$http.get('js/data.json').success(function(data) {
$scope.clownfish = data;
$scope.clownfishOrder = 'name';
$scope.parents = Parents;
console.log($scope);
});
}]);
app.js -- 最近的两次其他尝试,我尝试将此作为附加过滤器堆叠在 fmtIt 过滤器上
myApp.filter('trustAsHTML', ['$sce', function($sce){
return function(text) {
return $sce.trustAsHtml(text);
};
}]);
-- 最初尝试这个是为了获得 $sce
myApp.filter('fmtIt', function ($sce) {
return function (name) {
var parts = name.split(' "');
if (parts.length == 2) {
return $sce.trustAsHtml("<i>".concat(parts[0], "</i>", ' "', parts[1]));
} else {
return $sce.trustAsHtml("<i>".concat(parts[0], "</i>"));
}
}
});
最佳答案
很难从您发布的内容中判断出您的问题出在哪里,但也许一个有效的演示可以让您比较您的实现并确定哪里出了问题。
var app = angular.module('demo', ['ngSanitize']);
app.controller('NamesCtrl', function($scope){
$scope.names = [
{first: 'Jennifer Ann', last: 'Meade'},
{first: 'Colin', last: 'Davis'},
{first: 'Karen Walker', last: 'Johnson'}
];
});
app.filter('fmtIt', function () {
return function (name) {
var parts = name.split(' ');
if (parts.length == 2) {
return "<i>".concat(parts[0], "</i>", ' ', parts[1]);
} else {
return "<i>".concat(parts[0], "</i>");
}
};
});
<script src="https://code.angularjs.org/1.3.17/angular.js"></script>
<script src="https://code.angularjs.org/1.3.17/angular-sanitize.js"></script>
<div ng-app="demo" ng-controller="NamesCtrl">
<h1 ng-repeat="name in names"><span ng-bind-html="name.first | fmtIt"></span> {{name.last}}</h1>
</div>
此演示与您发布的示例代码中的第一个实现之间的一个区别是,我在空间上拆分而不是 "
,但在我的演示和相应的数据中更改了它,似乎没有任何影响。
请注意,angular.js 必须在脚本标签中的 angular-sanitize.js 之前加载。虽然,如果您如所示在模块中正确注入(inject) ngSanitize,则会出现注入(inject)错误。
关于javascript - AngularJS 过滤器错误地返回 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271789/