【发布时间】:2014-06-26 04:08:09
【问题描述】:
所以基本上我想操纵 DOM 并将画布标签替换为具有 角度变量作为属性...
我使用这行代码:
$("canvas").replaceWith('<img id="editImage" ng-src={{ImageToEdit}}>');
但最终插入的是这样的:
<img id="editImage" ng-src="{{ImageToEdit}}">
{{ImageToEdit}} 周围的引号阻止 angular 意识到它是范围的一部分。任何解决方案将不胜感激!
编辑: 好吧,这比我想象的要复杂一些......所以如果我提供更多背景信息,你们可以更好地帮助我:
让我们从页面加载时的外观开始:
<img id="editImage" class="edit-image" ng-src="{{ImageToEdit}}">
<button class="btn btn-success" ng-click="previous()">prev</button>
<button class="btn btn-success" onClick="invert()">invert</button>
<button class="btn btn-success" ng-click="next()">next</button>
当调用 previous 或 next 时,ImageToEdit 会发生变化,但如果调用 invert():
function invert(){
img = document.getElementById('editImage');
var newpix = Pixastic.process(img, "invert");
}
Pixastic.process 将修改 DOM 并将 img 标签更改为 canvas 标签(并删除 ng-src 属性)
所以当例如 next() 被调用时,什么都不会改变......所以我尝试做的是在 next() 中调用一个函数,该函数从画布返回数据并将其转换回原始 img 标签..
$scope.next = function (){
var data = resetCanvasToImgAngGetModifiedData();
$scope.images[$scope.index] = data;
if($scope.index == ($scope.images.length -1)){
$scope.index = 0;
}else{
$scope.index = $scope.index + 1;
}
$scope.ImageToEdit = $scope.images[$scope.index];
}
function resetCanvasToImgAngGetModifiedData(){
var canvas = document.getElementById("editImage");
var dataURL = canvas.toDataURL();
$("canvas").replaceWith('<img id="editImage" class="edit-image" ng-src= {{ImageToEdit}}>');
return dataURL;
}
我不明白如何使用指令来完成此操作...因为原始 img 标签将被 Pixastic 销毁
【问题讨论】:
-
为什么不使用指令替换内容而不是使用jQuery。我想可能更容易注意到错误。但是,我认为问题不在于这里的引号。
-
动态添加的html需要使用$compile服务编译动态html内容。
-
哦,谢谢!我会研究 $compile
标签: javascript jquery html angularjs