Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:在没有$watch的情况下可以对ng绑定html进行后期处理吗?_Angularjs_Angularjs Directive_Ng Bind Html_Ng Bind - Fatal编程技术网

AngularJS:在没有$watch的情况下可以对ng绑定html进行后期处理吗?

AngularJS:在没有$watch的情况下可以对ng绑定html进行后期处理吗?,angularjs,angularjs-directive,ng-bind-html,ng-bind,Angularjs,Angularjs Directive,Ng Bind Html,Ng Bind,我有html内容,应该通过ng bind html指令输出,之后我想对这些内容进行一些操作(例如DOM操作、jQuery插件等) stackoverflow为我提供了: 和 但就我不打算更改此内容而言,我不想使用$watch。是否可以不使用$watch?选项1(根据要求避免$watch): 一种选择是跳过ng bind html和$compile或$parse您自己的html。Angular的ngBindHtml本身做了如下工作: var ngBindHtmlGetter = $parse(tA

我有html内容,应该通过ng bind html指令输出,之后我想对这些内容进行一些操作(例如DOM操作、jQuery插件等)

stackoverflow为我提供了:

但就我不打算更改此内容而言,我不想使用$watch。是否可以不使用$watch

选项1(根据要求避免
$watch
):

一种选择是跳过
ng bind html
$compile
$parse
您自己的html。Angular的
ngBindHtml
本身做了如下工作:

var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
// ... It does some other, less relevant stuff between these
element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
var ngBindHtmlGetter = $parse(attrs.someAttrContainingContent);
element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
doPostProcessing(element); // Your additional stuff goes here

所以您总是可以编写一个定制指令来完成这些事情,以及后处理(如果需要,甚至是预处理)。大致如下:

var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
// ... It does some other, less relevant stuff between these
element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
var ngBindHtmlGetter = $parse(attrs.someAttrContainingContent);
element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
doPostProcessing(element); // Your additional stuff goes here
选项2(保留
$watch
,但取消绑定):

如果您想使用
ng bind html
,并且担心有额外的观察者在身边,那么另一个可能对您更简单的选择就是解除观察者的绑定。您可以非常轻松地解除绑定(
$watch
返回一个“解除绑定”函数):


我可能完全误解了你在寻找什么,但是,如果问题是

如何在没有$watcher的情况下将HTML绑定到视图

展示如何

通过升级到angular-1.3.x,您可以访问一次性绑定
{{{::expr}

因此,这实际上只是一个信任任何
sometext
可能是HTML的东西(通过使用)并使用
ng bind HTML=“::sometext”
输出它的问题

瞧,没有
$watchers
,您可以完全取消自定义指令


哦,还有
如果这不是你想要的,一定要告诉我,我会删除我的答案。

这对我来说没有任何意义。您正在将HTML存储在您的模型中,您想让第三方插件对其进行操作吗?这里感觉有些不对劲,似乎与angular的目标背道而驰。您如何设置
ng bind html
的值?通过ajax还是使用一些动作?@Claies,我们将HTML存储在DB中,是的,在模型中,通过ajax(yes@Pankaj)诚实地说,将HTML存储在数据库中的做法毫无意义。为什么?我有在WYSIWYG编辑器中准备的内容,可以在那里粘贴任何你想要的东西(如图像、视频)。是的,不幸的是,这不是我想要的。我的问题更多的是关于后处理。想详细说明一下吗?我的意思是,你想要公开的HTML内容是什么样子的?HTML是要运行的指令的载体吗?我很难理解这里的最终目标是什么。我的内容是由WYSIWYG编辑器创建的。例如,对于我需要应用jquery fancybox的图像,对于iframe(嵌入式视频),我创建了一个包装器,以使它们在手机上响应。我觉得在第一个选项中,我们仍然需要手表,您能提供小提琴吗?好的,会有一个手表
ngBind
ngBindHtml
本身添加了一个观察者,您建议使用该观察者,因此我假设您试图避免额外的观察者(即您的指令)。如果您想在代码中避免它们,您可以做一些技巧:
,现在在链接时,您将拥有HTML内容,不需要进一步的观察者(注意:
ngIf
本身添加了一个观察者)。这里有一个例子:如果你根本不想要观察者,我建议结合我的选项1和选项2。如中所示,使用选项1构建HTML,使用选项2杀死一个观察者-使用任何内部角度指令将添加观察者。所有人都说:我并不真的建议这样做,也不认为不惜一切代价避免观察者是一件好事。观察者是首先让Angular变得有用的一部分。谢谢你详细的回答!我非常了解观察者是什么,甚至做了关于他们的介绍-:)只是想跳出框框思考。感谢您提供了非常有趣的带有
ng if
的变体!对,我不怀疑你知道它们是什么。如果你真的担心太多的观察者,你可能真的想更多地使用它们-如果你添加了观察者,Angular就不会为你这么做(
ngIf
添加观察者,
ngBind
添加一个,等等),如果你自己添加了观察者,那么你也可以解除绑定(在上面帖子的选项2中概述),给你留下0个观察者。使用
ng if
,您将始终拥有一个:
var unbindPostProcess = scope.$watch(attrs.ngBind, function(newvalue) {
    doPostProcessing(element); // Whatever the additional function may be
    unbindPostProcess(); // Perhaps guarded to unbind at the right time.
});