从控制器中解耦(unbind / $ destroy)元素并将控制器注入新元素

时间:2017-05-31 21:02:17

标签: angular controller duplicates destroy unbind

所以在我的应用程序中,我有这个控制器用ajax检查服务器并查看用户是否使用JWT进行了身份验证,如果是,则用不同的元素替换该元素,然后执行范围注入。该部分有效,但主要问题是即使旧元素不再存在,$ scope。$ watch也会运行两次,因为Angular仍然具有以前附加到它运行的代码。

这里是一个注射器无法工作的小提琴,即使它绝对适用于我。单击右侧div可以让您知道它已被单击。单击左侧会增加服务中的值,该值会向右侧控制器中的一个监视单击左侧的监视。但它发生了两次,因为当它不是DOM的一部分时,Angular仍然可以看到右边替换的旧div。

https://jsfiddle.net/cq9wp6q8/

这就是注射器的调用方式:

  var el =  document.getElementById('insertHere')
  var div = "<div id = 'rightBarReplace' ng-controller = 'rightBar' ><div id='rightBaby' ng-click = 'clickFunc()'/></div>"
  el.innerHTML = (div)

这是注射器:

  function startInjection(div){
    console.log("StartInjection of " + div)
      setTimeout(function () {
        console.log("InjectRightController " + div)
        var $div = angular.element(document.querySelector('#' + div))
        var $appElement = angular.element(document.querySelector('#mainModule'))

        console.log($div)
        // console.log(angular.element(document).injector())

        angular.element(document).injector().invoke(function($compile) {
          var scope = angular.element($div).scope();
          $compile($div)(scope);
        });
      }, 3333); 
  }

我在寻找解除绑定或$ scope。$ destroy?如果是这样,我在这种情况下如何使用它?

非常感谢你们。这个网站太棒了。 :)

编辑:我似乎通过添加时间延迟取得了一些进展。

      setTimeout(function () {
        console.log("Destroying")
        $scope.$destroy();
      }, 50); 

但是会产生什么样的恐怖?请继续关注。

0 个答案:

没有答案