简体   繁体   English

Angularjs - 从HTML代码输出DOM元素

[英]Angularjs - Output DOM element from HTML code

How do I output a DOM element (object) directly from the HTML code in AngularJS? 如何直接从AngularJS中的HTML代码输出DOM元素(对象)?
See the code below please, it describes more of what I want to do. 请参阅下面的代码,它描述了我想要做的更多内容。

I tried with curly brackets, ng-bind-html.. none of them worked. 我尝试用大括号,ng-bind-html ..没有一个工作。

Any help will be appreciated. 任何帮助将不胜感激。 Thanks! 谢谢!

 var app = angular.module('myApp', ['ngSanitize']) .controller('globalCtrl', function($scope){ $scope.imageToCanvas = function(image){ var canvas = document.createElement("canvas"); canvas.width = image.width; canvas.height = image.height; canvas.getContext("2d").drawImage(image, 0, 0); return canvas; }; $scope.img = new Image(); $scope.img.onload = function(){ $scope.canvas = $scope.imageToCanvas(this); angular.element('#canvasTarget').html($scope.canvas); }; $scope.img.src = "https://www.w3schools.com/css/trolltunga.jpg"; }); 
 canvas { max-width: 50%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-sanitize/1.6.4/angular-sanitize.min.js"></script> <div ng-app="myApp"> <div ng-controller="globalCtrl"> <section> <h3>Obviously html() method from JS code works fine.</h3> <div id="canvasTarget"></div> </section> <hr /> <section> <h3>But how to output an object directly from HTML code?</h3> <p>try #1</p> {{canvas}} <p>try #2</p> <div ng-bind-html="canvas"></div> </section> </div> </div> 

To manipulate DOM you need wrap it into directive 要操纵DOM,您需要将其包装到指令中

app.directive('renderCanvas', function($compile){
 return {
   restrict: 'E',
    scope: {
       canvas: '='
    },
   link: function(scope, elem, attr){

     console.log('canvas', scope.canvas);

     scope.$watch('canvas', function(){

         elem.html(' ');
         var compiled = $compile(scope.canvas)(scope);

         elem.append(compiled);

     })


 }

}
})

 var app = angular.module('myApp', ['ngSanitize']); app.directive('renderCanvas', function($compile){ return { restrict: 'E', scope: { canvas: '=' }, link: function(scope, elem, attr){ console.log('canvas', scope.canvas); scope.$watch('canvas', function(){ elem.html(' '); var compiled = $compile(scope.canvas)(scope); elem.append(compiled); }) } } }) app.controller('globalCtrl', function($scope){ $scope.imageToCanvas = function(image){ var canvas = document.createElement("canvas"); canvas.width = image.width; canvas.height = image.height; canvas.getContext("2d").drawImage(image, 0, 0); return canvas; }; $scope.img = new Image(); $scope.img.onload = function(){ $scope.canvas = $scope.imageToCanvas(this); //angular.element('#canvasTarget').html($scope.canvas); $scope.$apply(); }; $scope.img.src = "https://www.w3schools.com/css/trolltunga.jpg"; }); 
 canvas { max-width: 50%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-sanitize/1.6.4/angular-sanitize.min.js"></script> <div ng-app="myApp"> <div ng-controller="globalCtrl"> <section> <h3>Obviously html() method from JS code works fine.</h3> <div id="canvasTarget"></div> </section> <hr /> <section> <h3>But how to output an object directly from HTML code?</h3> <p>try #1</p> <div data-ng-if="canvas"> <render-canvas canvas="canvas"></render-canvas> </div> <p>try #2</p> <div ng-bind-html="canvas"></div> </section> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM