在我的应用程序中,我有一个指令,可以将模板动态加载到包装器中。我如何以这种方式实现它的原因是有很好的过渡。 它似乎工作正常,直到我意识到,当我第二次加载相同的视图时,看起来该视图中的控制器是重复的。
其中一个控制器中运行$interval
只在视图正确时才应用更改,但再次进入视图时会触发两次(实际上每次加载视图时都会触发一次)。
我尝试了$scope.$on('$destroy')
但是从来没有为控制器启动,因为我用jQuery删除了元素。如何在触发current.remove()
?
这是取代视图的指令的片段:
function setView(view) {
var target = $('<div id="' + view + '" class="view ' + dir + '"></div>');
var templateName = "'views/" + view + ".tpl.html'";
var template = angular.element('<div ng-include="' + templateName + '"></div>');
var current = el.find('#' + currentViewId);
if (current.length === 0) {
current = el.find('.view.current');
}
el.append(target);
target.html(template);
$compile(template)(scope);
currentViewId = view;
setTimeout(function () {
current.removeClass('current').addClass((dir == 'next' ? 'prev' : 'next'));
target.addClass('current').removeClass(dir);
setTimeout(function () {
current.remove();
}, 500);
}, 50);
}