2014-12-10 3 views
0

Angularjs < = 1.2에 대해 "한 번 바인딩"을 만드는 방법을 알아 내려고하고 있습니다. 나는이 answer이 자신의 bindOnce 지시문을 만드는 방법을 설명하는 것을 발견했습니다. 다음 지시문을 사용할 때 표시됩니다 :

app.directive('bindOnce', function() { 
    return { 
      scope: true, 
      link: function($scope) { 
       setTimeout(function() { 
        $scope.$destroy(); 
       }, 0); 
      } 
     } 
    }); 

데이터가 한 번 바인딩됩니다. 그러나, 나는 $$ 관측통이 아직 켜져 있음을 볼 수 있습니다. JSBin 다음을 살펴보십시오. 콘솔에서 주석 처리 된 감시자 카운트 코드를 실행하면 감시자가 아직 살아 있음을 확인할 수 있습니다.

EDIT : 어떤 이유로 각도 1.3의 동일한 지시문을 사용할 때 관찰자 수는 0으로 변경됩니다.

+1

  • angular-mocks.js

  • testabilityPatch.js

  • 당신의 setTimeout 대신 $ 제한 시간을 사용하여 시도? –

    +1

    https://github.com/Pasvaz/bindonce에서 보셨습니까? – james

    +1

    @ 존 스노우 : 나는 그것을 바꿨다. "github.com/Pasvaz/bindonce"에 관해서 - 그것은 일을합니다. 나는 뒤에서 일어나는 일을 이해하기를 원했다. –

    답변

    -1

    전문가 제거 cleanup 기능을 사용 깨는 변화를 찾을 수

    function onetime() 
        { 
        /*...*/ 
        onetime = Function; 
        } 
    
    angular.module('myApp').constant('bindonce', onetime); 
    
    angular.module('myApp').controller('foo', function($bindonce){ 
        this.$inject = '$bindonce'; 
        $scope.mybind = $bindonce(); 
    } 
    

    사용 참조 마이그레이션 가이드 :

    function cleanup(element) 
        { 
        element.off().removeData(); 
    
        var injector = currentSpec.$injector; 
    
        element.$injector = null; 
    
        // clean up jquery's fragment cache 
        angular.forEach(angular.element.fragments, function(val, key) { 
        delete angular.element.fragments[key]; 
        }); 
    
        angular.forEach(angular.callbacks, function(val, key) 
        { 
        delete angular.callbacks[key]; 
        }); 
    
        angular.callbacks.counter = 0; 
        } 
    

    를 사용하여 한 번 단순 바인딩으로 자기가 자폭하는 서비스를

    참고

    +0

    제 질문은 특별히 Angular 1.2.X를 사용하는 솔루션을 찾고 있다고 언급했습니다. {{:: attr}}은 앵귤러 1.3+ –

    관련 문제