javascript 網頁title - 將HTML插入到視圖中




javascript語法大全 網頁嵌入廣告 (16)

查看我在以下兩個地方為您發布的答案:

http://forum.ionicframework.com/t/eval-json-data-as-html/1455/6

http://codepen.io/calendee/pen/DKhbc

是否有可能在AngularJS控制器中創建一個HTML片段,並將該HTML顯示在視圖中?

這是因為需要將不一致的JSON blob轉換為id : value對的嵌套列表。 因此,HTML是在控制器中創建的,現在我正在尋找它來顯示它。

我已經創建了一個模型屬性,但不能在視圖中渲染它,只需要打印HTML。

更新

看起來問題在於將創建的HTML呈現為引號內的字符串。 將試圖找到解決這個問題的方法。

示例控制器:

var SomeController = function () {

    this.customHtml = '<ul><li>render me please</li></ul>';
}

示例視圖:

<div ng:bind="customHtml"></div>

給出:

<div>
    "<ul><li>render me please</li></ul>"
</div>

使用

<div ng-bind-html="customHtml"></div>

angular.module('MyApp', ['ngSanitize']);

為此,您需要在您的html文件中包含angular-sanitize.js

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-sanitize.js"></script>

你也可以使用ng-include

<div class="col-sm-9 TabContent_container" ng-include="template/custom.html">
</div>

你可以使用“ng-show”來顯示隱藏這個模板數據。


對於Angular 1.x,在HTML中使用ng-bind-html

<div ng-bind-html="thisCanBeusedInsideNgBindHtml"></div>

此時,您將attempting to use an unsafe value in a safe context錯誤中attempting to use an unsafe value in a safe context因此您需要使用ngSanitize$sce來解決該問題。

$ SCE

在控制器中使用$sce.trustAsHtml()來轉換html字符串。

 $scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml(someHtmlVar);

ngSanitize

有2個步驟:

  1. 包括angular-sanitize.min.js資源,即:
    <script src="lib/angular/angular-sanitize.min.js"></script>

  2. 在一個js文件(控制器或通常app.js)中,包含ngSanitize,即:
    angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngSanitize'])


ng-bind-html-unsafe不再有效。

這是最短的方式:

創建一個過濾器:

myApp.filter('unsafe', function($sce) { return $sce.trustAsHtml; });

在你看來:

<div ng-bind-html="customHtml | unsafe"></div>

PS此方法不要求您包含ngSanitize模塊。


剛剛使用ngBindHtml通過遵循角度(v1.4)文檔

<div ng-bind-html="expression"></div> 
and expression can be "<ul><li>render me please</li></ul>"

確保在模塊的依賴項中包含ngSanitize。 那麼它應該工作得很好。


另一個解決方案,除了使用scoped屬性外,與blrbr非常相似:

angular.module('app')
.directive('renderHtml', ['$compile', function ($compile) {
    return {
      restrict: 'E',
      scope: {
        html: '='
      },
      link: function postLink(scope, element, attrs) {

          function appendHtml() {
              if(scope.html) {
                  var newElement = angular.element(scope.html);
                  $compile(newElement)(scope);
                  element.append(newElement);
              }
          }

          scope.$watch(function() { return scope.html }, appendHtml);
      }
    };
  }]);

接著

<render-html html="htmlAsString"></render-html>

注意你可以用element.append()替換element.replaceWith()


Angular JS在標籤內顯示HTML

上述鏈接中提供的解決方案對我來說很有效,這個線程沒有任何選項。 對於任何正在尋找與AngularJS 1.2.9版本相同的東西的人

這是一個副本:

好的,我找到了解決方案:

JS:

$scope.renderHtml = function(html_code)
{
    return $sce.trustAsHtml(html_code);
};

HTML:

<p ng-bind-html="renderHtml(value.button)"></p>

編輯:

設置如下:

JS文件:

angular.module('MyModule').controller('MyController', ['$scope', '$http', '$sce',
    function ($scope, $http, $sce) {
        $scope.renderHtml = function (htmlCode) {
            return $sce.trustAsHtml(htmlCode);
        };

        $scope.body = '<div style="width:200px; height:200px; border:1px solid blue;"></div>'; 

    }]);

HTML文件:

<div ng-controller="MyController">
    <div ng-bind-html="renderHtml(body)"></div>
</div>

對於這個問題,還有一個解決方案是使用角度創建新的屬性或指令

產品specs.html

 <h4>Specs</h4>
        <ul class="list-unstyled">
          <li>
            <strong>Shine</strong>
            : {{product.shine}}</li>
          <li>
            <strong>Faces</strong>
            : {{product.faces}}</li>
          <li>
            <strong>Rarity</strong>
            : {{product.rarity}}</li>
          <li>
            <strong>Color</strong>
            : {{product.color}}</li>
        </ul>

app.js

 (function() {
var app = angular.module('gemStore', []);    
app.directive("     <div ng-show="tab.isSet(2)" product-specs>", function() {
return {
  restrict: 'E',
  templateUrl: "product-specs.html"
};
});

的index.html

 <div>
 <product-specs>  </product-specs>//it will load product-specs.html file here.
 </div>

要么

<div  product-specs>//it will add product-specs.html file 

要么

<div ng-include="product-description.html"></div>

https://docs.angularjs.org/guide/directive


我今天試過了,唯一的辦法就是這個

<div ng-bind-html-unsafe="expression"></div>


你也可以像這樣創建一個過濾器:

var app = angular.module("demoApp", ['ngResource']);

app.filter("trust", ['$sce', function($sce) {
  return function(htmlCode){
    return $sce.trustAsHtml(htmlCode);
  }
}]);

然後在視圖中

<div ng-bind-html="trusted_html_variable | trust"></div>

注意 :此過濾器信任傳遞給它的任何和所有html,並且如果將帶有用戶輸入的變量傳遞給它,則可能會呈現XSS漏洞。


這裡的解決方案就像這樣做一個過濾器

.filter('trusted',
   function($sce) {
     return function(ss) {
       return $sce.trustAsHtml(ss)
     };
   }
)

並將其用作ng-bind-html之類的過濾器

<div ng-bind-html="code | trusted">

並感謝Ruben Decrop


從Angular 4開始,這就是現在的工作方式:

<div [innerHTML]="htmlString">
</div>

從這個問題here.


我發現使用ng-sanitize不允許我在html中添加ng-click。

為了解決這個問題,我加了一條指令 喜歡這個:

app.directive('htmldiv', function($compile, $parse) {
return {
  restrict: 'E',
  link: function(scope, element, attr) {
    scope.$watch(attr.content, function() {
      element.html($parse(attr.content)(scope));
      $compile(element.contents())(scope);
    }, true);
  }
}
});

這是HTML:

<htmldiv content="theContent"></htmldiv>

祝你好運。


在html上

<div ng-controller="myAppController as myCtrl">

<div ng-bind-html-unsafe="myCtrl.comment.msg"></div>

要么

<div ng-bind-html="myCtrl.comment.msg"></div

在控制器上

mySceApp.controller("myAppController", function myAppController( $sce) {

this.myCtrl.comment.msg = $sce.trustAsHtml(html);

也可以使用$scope.comment.msg = $sce.trustAsHtml(html);


只是為了補充@numediaweb給出的@numediaweb

如果您正在敲打牆壁,因為按照說明設置了maintainAspectRatio=false :我最初從我在網站上使用Angular 2+使用Chart.js的示例中復制了我的代碼:

        <div style="display: block">
          <canvas baseChart
                  [datasets]="chartData"
                  [labels]="chartLabels"
                  [options]="chartOptions"
                  [legend]="chartLegend"
                  [colors]="chartColors"
                  [chartType]="chartType">
          </canvas>
        </div>

為了使這個工作正常,你必須刪除嵌入的(和不必要的) style="display: block"而是為封閉的div定義一個類,並在CSS中定義它的高度。

一旦你這樣做,圖表應具有響應寬度但固定高度。





javascript angularjs escaping html-sanitizing