jquery remove()后未销毁角度控制器$scope

jquery remove()后未销毁角度控制器$scope,jquery,angularjs,destroy,Jquery,Angularjs,Destroy,在我的应用程序中,我有一个指令,可以将模板动态加载到包装器中。我以这种方式实现它的原因是有很好的转换。 它似乎工作得很好,直到我意识到当我第二次加载同一个视图时,该视图中的控制器似乎是重复的 其中一个控制器中运行一个$interval,该控制器仅在视图正确时应用更改,但当再次进入视图时,它会触发两次(实际上每次加载视图时触发一次) 我在(“$destroy”)上尝试了$scope.$on,但由于我使用jQuery删除了元素,因此控制器从未触发过。触发current.remove()时,如何在当前

在我的应用程序中,我有一个指令,可以将模板动态加载到包装器中。我以这种方式实现它的原因是有很好的转换。 它似乎工作得很好,直到我意识到当我第二次加载同一个视图时,该视图中的控制器似乎是重复的

其中一个控制器中运行一个
$interval
,该控制器仅在视图正确时应用更改,但当再次进入视图时,它会触发两次(实际上每次加载视图时触发一次)

我在(“$destroy”)上尝试了
$scope.$on,但由于我使用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);
}
函数集视图(视图){
var目标=$('');
var templateName=“'views/”+view+”.tpl.html';
变量模板=角度元素(“”);
var current=el.find(“#”+currentViewId);
如果(当前长度===0){
current=el.find('.view.current');
}
el.追加(目标);
html(模板);
$compile(模板)(范围);
currentViewId=视图;
setTimeout(函数(){
current.removeClass('current').addClass((dir=='next'?'prev':'next');
target.addClass('current').removeClass(dir);
setTimeout(函数(){
current.remove();
}, 500);
}, 50);
}

我不知道为什么,但是用jQuery删除角度范围听起来不是个好主意。。。瘦骨嶙峋的家伙一定已经考虑过这一点,而且一定有一个合适的方法来做到这一点。jQuery在Angular上的操作对我来说只是笨拙的修补。为什么不试试模板、多个控制器、ng隐藏?…嗯,是的,我想不是,但是既然可以不向dom添加元素并使用$complile,那么以后应该有一个正确的方法来删除它。我在current.remove()之前添加了current.children().scope().$destroy(),这似乎很有效。我知道这可能不是将jquery与angular混合使用的最佳解决方案,但在某些情况下,它的效率会更高。在某些情况下,可以这样说:)