2016-04-05 8 views
0

私は現在、他の誰かによって作成されたanglejsアプリケーションを拡張しています。サイトは動作しますが、コンソールには多くのエラーTypeError: fnPtr is not a functionが発生しています。エラー・スタックは本当に便利ではありませんが、私はそれらのスタック内で命名されている自分のアプリケーション内の二つの異なるスポットを見つけるために管理:https://github.com/angular/angular.js/issues/2621:最初のものは、このバグの回避策ですTypeErrorがたくさんあります:fnPtrはangularJsの関数ではありません

  1. を。私はこれが実際にはもはや必要ではないと信じています(角度1.2.6を使用しているので、このバグについてはこのバグが修正されているようです)。関連するビットは次のとおりです。

    ScopePrototype.$watchCollection = function(obj, listener) { 
          var self = this; 
          var oldValue; 
          var newValue; 
          var changeFlipFlop = 0; 
          var objGetter = $parse(obj); 
          var internalArray = []; 
          var internalObject = {}; 
          var internalLength = 0; 
    
          var internalValue = initWatchVal; 
    
          function $watchCollectionWatch() { 
           var newLength, key, i, changeDetected; 
    
           newValue = objGetter(self); 
           ....} 
    

    エラーは、ある時点でnewValue = objGetter(self);を指しています。私はこの(スニペット)のように見えるんangular.jsファイル内の同じ場所に名前が付いてます私のコードから、この回避策を削除しても:

    $watchCollection: function(obj, listener) { 
        var self = this; 
        var oldValue; 
        var newValue; 
        var changeDetected = 0; 
        var objGetter = $parse(obj); 
        var internalArray = []; 
        var internalObject = {}; 
        var oldLength = 0; 
    
        function $watchCollectionWatch() { 
         newValue = objGetter(self); 
         var newLength, key; 
    
  2. 2回目の出現は、(doCheckにポイント)にも見知らぬ人です。すべてのベンダーのjsファイルは1つのvendor.jsファイルに「コンパイル」なっている

    return { 
        restrict: 'A', 
        scope: { 
         showLeft: '=', 
         showRight: '=' 
        }, 
        controller: function ($scope) { 
         $scope.checkVisibility = function(scrollPosition, elementWidth){ 
          if(scrollPosition <= 0) { 
           $scope.showLeft = false; 
          } else { 
           $scope.showLeft = true; 
          } 
          if(scrollPosition >= elementWidth) { 
           $scope.showRight = false; 
          } else { 
           $scope.showRight = true; 
          } 
    
          if(!$scope.$parent.$$phase) { // Prevent digest error 
           $scope.$apply(); 
          } 
         }; 
        }, 
    link: function($scope, $element, $attr) { 
         var doCheck = function(){ 
          $scope.checkVisibility($element[0].scrollLeft, $element[0].scrollWidth - $element[0].offsetWidth - $attr.rightScrollOffset); 
    
         }; 
    
         angular.element($element).scroll(function(){ 
          doCheck(); 
         }); 
    
         /* use timeout, as $element[0].children[0].offsetWidth is not being ready now */ 
         $timeout(function(){ 
          doCheck(); 
         }, 200); 
    
         /* also set on resize */ 
         angular.element($window).bind('resize',function(){ 
          doCheck(); 
         }); 
    
         /* also set on dom node changes of scroll Div */ 
         angular.element($element).bind('DOMNodeInserted DOMNodeRemoved', function(event) { 
          doCheck(); 
         }); 
        } 
    

:これは単純なディレクティブです。奇妙なことは、このコンパイルされたvendor.jsの古いバージョンを使用すると問題なく動作することです。私はすでに両方のファイルを比較して、バージョンが不一致かどうかを確認しようとしましたが、重大なものは見つかりませんでした。ここで何が起こるかもしれないという人は誰ですか?また、ビルドプロセスをスキップして、各.jsファイルを単独で使用すると発生します。

+0

checkVisibilityは問題のある箇所ですが、ソースを提供していません。関連するすべてのコードが適切かもしれません。エラースタックを提供してください(それぞれの.jsファイルが独自のものである場合は未解決のアプリケーション用です)、回答者が有用かどうかを判断させてください。 – estus

+0

あなたは何を意味するのか分かりません。投稿した2つのスポットは、angularjsファイルの外の唯一のものです。何を追加すればいいですか? – puelo

+0

ああ、私は今参照してください。一度iamを投稿します。 – puelo

答えて

0

問題が見つかりました。両方のファイルを介して多くのdiffアクションが行われた後、私はangle-bootstrap-tplsライブラリの不一致に気付きました。古いvendor.jsファイルはバージョン0.10.0を使用し、私は0.11.2を使用しました。 bower.jsonファイルにはangular-bootstrap: "~0.10.0"が必要ですが、バウアーはバージョン0.10.0をインストールできないので、かなり奇妙です。また、バージョン0.11.2は、角度バージョン1.2.6(これは私が使用しています)と互換性があります。

関連する問題