【发布时间】:2014-05-09 17:09:18
【问题描述】:
我正在运行 AngularJS 来管理 WebApp 和操纵 DOM 的 jQuery 插件(我没有选择混合或两者都不混合)。
这是我的html
<ul jQuery-plugin-directive="{{changeAfterSuccess}}">
<li ng-repeat="var in varList">
{{var.attr}}
</li>
</ul>
这是指令
app.directive('jQueryPluginDirective',['$timeout', function (timer) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var myFunctionToExecuteAfterDomMod = function(){
//element.myPluginJquery
}
}
};
}]);
这是我的控制器:
app.controller('homeController', ['$scope', 'anHttpService', function ($scope, documentService) {
anHttpService.getVarList().success(function (result) {
$scope.varList = result.var;
//$scope.changeAfterSuccess = "sthg";
});
}]);
如果我在 myFunctionToExecuteAfterDomMod 上使用 0 毫秒的计时器,它就不起作用。
如果我使用 attrs.$observe("jQueryPluginDirective", myFunctionToExecuteAfterDomMod) 并更改 changeAfterSuccess。 这不起作用。
我成功使用它的唯一方法是使用超过 10 毫秒的计时器。但我不想使用这种丑陋的解决方案。
这确认 myFunctionToExecuteAfterDomMod 在 {{var.attr}} 更改之前被调用,这就是它不起作用的原因......
现在搜索了2个小时的解决方案,我很绝望,我希望有人有一个好的解决方案。
巴斯蒂安
更新
我现在做我应该做的事情。我确信这一点,因为当我应用简单的 DOM 修改(如 css 值更改)时,它运行良好。问题是插件 jstree 如果我不设置 200 毫秒计时器,它就不起作用......我现在将使用“解决方案”,然后找到一种不使用插件的方法。
【问题讨论】:
-
您能指定操作顺序吗?哪一个?执行RESTApi,然后使用Jquery 更改dom?还是运行 Jquery 并在之后执行 RESTApi?
-
在标记中引用你的指令是错误的,应该是:
<ul j-query-plugin-directive= -
将 $watch 添加到您的指令中,该指令在 varList 更改后执行。在此处查看如何执行此操作的简单示例。 stackoverflow.com/questions/21779094/…
-
@Aidin:我想在 RestAPI 之后运行 jQUery
-
你是什么意思它不会在 DOM 更改后工作?请详细说明。一个笨拙的人会有所帮助
标签: javascript jquery angularjs rest jstree