在这个jQuery 淡入淡出小提琴(我在JSFiddles 示例wiki 页面上找到它)中,作者定义了一个“fadey”指令并在指令的链接函数中执行 jQuery fadeIn(或fadeOut)”
<li ng-repeat="item in items" fadey="500">
...
myApp.directive('fadey', function() {
return {
restrict: 'A',
link: function(scope, elm, attrs) {
var duration = parseInt(attrs.fadey);
if (isNaN(duration)) {
duration = 500;
}
elm = jQuery(elm); // this line is not needed if jQuery is loaded before Angular
elm.hide();
elm.fadeIn(duration)
另一种可能的解决方案是使用$evalAsync:请参阅Miško 的此评论,他在其中指出:
asyncEval 在 DOM 构建之后但在浏览器呈现之前。我相信这是您想要附加 jquery 插件的时候了。否则你会有闪烁。如果你真的想在浏览器渲染后做,你可以做 $defer(fn, 0);
($defer 更名为 $timeout)。
但是,我认为使用指令(因为您正在操作 DOM)是更好的方法。
这是一个SO 帖子,其中 OP 尝试在范围内侦听 $viewContentLoaded 事件(这是另一种选择),以便应用一些 jQuery 函数。建议/答案再次使用指令。