毁灭后如何恢复角度范围?

时间:2016-08-22 15:30:37

标签: angularjs angular-directive

我想在内部范围被破坏后重新编译。

我正在使用重新编译功能来帮助,这是" transcluded"是的。 每当我想破坏内部范围时,它也会破坏父(外部)范围。

如何在保持此重新编译功能不变的情况下避免删除父作用域?

  function compile() {
      transclude(scope, function(clone, clonedScope) {
           previousElements = clone;
          $el.append(clone);

            $timeout(function () {

              scope.callBack();
    alert("Df");
}, 0);
    });
  }


 $scope.callBack = function(){

      var elem = document.getElementById('test');
      //This code kill the test div, but also the parent scope
      //Can i only kill the test div scope?
   angular.element(elem).scope().$destroy();
  alert("dd");
}

以下是plunker: http://plnkr.co/edit/MePu8BipkkdHV0IEatbo

1 个答案:

答案 0 :(得分:0)

它正在销毁父作用域,因为您实际上从未创建过子作用域。

您可以尝试将scope: true添加到kcdRecompile指令。

app.directive('kcdRecompile', ['$parse','$timeout', function($parse, $timeout) {
  'use strict';
  return {
    transclude: true,
    scope: true,
    link: function link(scope, $el, attrs, ctrls, transclude) {
...

这会给kcdRecompile自己的范围。

如果您希望kcdRecompile拥有父作用域,但其被转换的内容具有自己的作用域,则可以使用scope.$new()而不是scope调用转换函数。

app.directive('kcdRecompile', ['$parse','$timeout', function($parse, $timeout) {
  'use strict';
  return {
    transclude: true,
    link: function link(scope, $el, attrs, ctrls, transclude) {
      var previousElements;

      //compile();

      function compile() {
        transclude(scope.$new(), function(clone, clonedScope) {
...