在切换视图时加载多个控制器(手动编译)

时间:2017-03-08 10:09:29

标签: angularjs

我目前正在尝试将一些角度集成到我们的MVC应用程序中。这需要对角度如何编译DOM有一些更深入的了解,但它似乎似乎无法实现。

Here's a link to the CodePen

基本上,我有一堆代码(我无法触摸)控制加载到DOM的页面。这使用JQuery。

我所拥有的是ng-include加载到模板中,这样就可以让我获得有意义的' DOM。因为这个元素是通过AJAX加载的,所以我必须在插入时手动$compile

这可以正常工作,直到我切换到另一个视图,然后再返回。控制器再次实例化(如预期的那样),但前一个仍在响应事件。

我认为我需要$destroy旧控制器及其所有子范围,但我如何获得它们?

1 个答案:

答案 0 :(得分:1)

你所缺少的是摧毁事件监听器$scope.$on(notifyRefreshEvent, ...而你通过做这样的事情来做到这一点。这是解决此问题的EventService代码段:

app.service('EventService', function($rootScope){
  var notifyRefreshEvent = "contact::refresh";
  var eventListenerDestroy;

  return {
    ...
  }

  ...

  function onContactRefresh($scope, handler) {
    eventListenerDestroy = $scope.$on(notifyRefreshEvent, function (e, data) {
      eventListenerDestroy(); // this guy destroys it
      handler(data);
    });
  }
});

另外,这里是forked codepen solution