【问题标题】:Why is my sanitized img tags coming up empty?为什么我清理过的 img 标签是空的?
【发布时间】:2015-08-08 17:08:32
【问题描述】:

以下代码是一个使用参数的函数。当我警告变量时,字符串完全按照它应该的方式显示。

$scope.createMap = function(size,scale,center,zoom,style){
     $scope.myMap = "<img ng-src='https://maps.googleapis.com/maps/api/staticmap?size="+size+"&scale="+scale+"&center=IL"+center+"&style="+style+"&zoom="+zoom+"'>";
     alert($scope.myMap);

     return;
}

但是,在 this 绑定到的 HTML 页面上:

<div ng-bind-html="myMap" id="myStaticMap">
    MAP GOES HERE
</div>

该区域是空的,当我“检查元素”时有&lt;img&gt;&lt;/img&gt;,所以它正在注册它是一个图像,但是空的。

同样的事情发生在这里:

$scope.displayPage = function(page){
        $scope.siteName = $scope.names[page].PageName;
        $scope.logo = "<img ng-src='"+$scope.names[page].logo+"'>";
        alert($scope.logo);

        $scope.createMap($scope.names[page].Size,$scope.names[page].Scale,$scope.names[page].Center,$scope.names[page].Zoom,$scope.names[page].Style);}

参数的使用方式略有不同。但同样,$scope.logo 的警报正在警告正确的字符串,但有 &lt;img&gt;&lt;/img&gt; 应该绑定它。 $scope.siteName 绑定得很好,但是它没有绑定任何 HTML。

我正在使用清理模块:

var app = angular.module('myApp', ["ngSanitize"]);

(脚本在我的外部参考列表中最后放置)

所以我不确定这里出了什么问题。


更新:所以我在下面的回答中提出了建议,当我将 ng-src 更改为 src 时它正在工作,这太棒了。但是,我在 Web 控制台中收到以下错误,有人知道为什么吗?无论我使用ng-src 还是src,我都明白:

"错误:html.indexOf 不是函数 htmlParser@http://code.angularjs.org/1.0.3/angular-sanitize.js:205:12 $sanitize@http://code.angularjs.org/1.0.3/angular-sanitize.js:119:1 ngBindHtmlWatchAction@http://code.angularjs.org/1.0.3/angular-sanitize.js:420:1 Yd/this.$gethttps://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:110:371 Yd/this.$gethttps://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:113:360 米@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:72:452 w@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:77:463 是的/https://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:79:24

var app = angular.module('myApp', ["ngSanitize"]);
app.controller('customersCtrl', function($scope, $http, $sce) {

【问题讨论】:

  • 你需要将图片url设为trustedResourceUrl

标签: angularjs


【解决方案1】:

当您从控制器中解析 html 时,您必须使用 angular 的 $sce 依赖项,以便将 html 标记为“受信任”:

angular.module("yourModule").controller("yourController",
    ["$scope", "$sce", function ($scope, $sce) {
        $scope.displayPage = function(page){
        $scope.siteName = $scope.names[page].PageName;
        $scope.logo = $sce.trustAsHtml("<img ng-src='"+$scope.names[page].logo+"'>");
        alert($scope.logo);
        $scope.createMap($scope.names[page].Size,$scope.names[page].Scale,$scope.names[page].Center,$scope.names[page].Zoom,$scope.names[page].Style);}
    }
]);

【讨论】:

  • 一旦我破译下一个问题是否相关,我将把它标记为答案:它现在在“检查元素”中显示 html,但视图是空白的,没有任何显示,甚至没有说如果喜欢的图像不存在。
  • 哦,刚刚注意到一个错误,我会提出我的问题。
  • 摘要循环可能没有解析您的 ng-src 指令
猜你喜欢
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2016-04-14
  • 2013-04-29
  • 1970-01-01
  • 2014-06-29
相关资源
最近更新 更多