Javascript AngularJS ngRepeat-监听元素移动(我需要使用ngRepeat呈现一个iFrame列表)

Javascript AngularJS ngRepeat-监听元素移动(我需要使用ngRepeat呈现一个iFrame列表),javascript,angularjs,iframe,tinymce,angularjs-ng-repeat,Javascript,Angularjs,Iframe,Tinymce,Angularjs Ng Repeat,我正在使用ng repeat指令呈现TinyMCE WYSIWYG列表: 当我更改控制器中小部件的顺序时,TinyMCE的实例会自动相应地重新排列 问题是TinyMCE小部件是一个iframe,当它在DOM中移动时,iframe状态被重置 所以我需要保存TinyMCE内容,并在移动元素之前从元素中删除TinyMCE,然后再次初始化TinyMCE,并在移动完成后应用保存的内容 有没有一种简单的方法能够以某种方式连接到ng repeat并注册元素移动的回调 如果我必须编写自己的ng repeat

我正在使用ng repeat指令呈现TinyMCE WYSIWYG列表:


当我更改控制器中小部件的顺序时,TinyMCE的实例会自动相应地重新排列

问题是TinyMCE小部件是一个iframe,当它在DOM中移动时,iframe状态被重置

所以我需要保存TinyMCE内容,并在移动元素之前从元素中删除TinyMCE,然后再次初始化TinyMCE,并在移动完成后应用保存的内容

有没有一种简单的方法能够以某种方式连接到ng repeat并注册元素移动的回调

如果我必须编写自己的ng repeat定制指令,那么以角度方式组织事件调度的合适架构是什么


我是否应该以某种方式将事件发送到子指令?或者子指令(在我的例子中是wysiwyg)应该订阅父指令的事件吗?

应该讨论给父指令的子指令,并最终包括使用这两个实体的完整指令循环。

问题实际上归结为“当ng重复完成DOM操作时我如何做某事”。 我在类似的问题中找到了答案:

在我的例子中,这很简单,因为控制器负责修改小部件列表。因此,我可以简单地发出
$scope.emit('pre_move')
$scope.emit('after_move')
事件,然后在我的
wysiwyg
指令中处理它们

重要的是在$timeout()中包装“移动后”!它保证执行将在下一个摘要周期开始,并且您可以确保所有DOM操作都在那个时候完成

控制器:

功能控制器($scope,$timeout){
var widget1=newwidget();
var widget2=新小部件();
$scope.widgets=[widget1,widget2]
$scope.emit('pre_move');
//洗牌小部件
$scope.widgets[0]=widget2;
$scope.widgets[1]=widget1;
$timeout(函数(){
//$timeout包装器是确保事件将被发出所必需的
//在下一个摘要周期中
$scope.emit('post_move');
})
}
所见即所得TinyMCE指令:

链接:函数(范围、元素、属性){
...
var含量;
作用域('pre_move',function(){
content=element.html();
element.tinymce().remove;//移动前移除tinymce
});
var含量;
作用域('post_move',function(){
element.tinymce().html(内容);//移动后重新初始化tinymce
});
}

也许您可以详细说明一下。