私は現在、他の誰かによって作成されたanglejsアプリケーションを拡張しています。サイトは動作しますが、コンソールには多くのエラーTypeError: fnPtr is not a function
が発生しています。エラー・スタックは本当に便利ではありませんが、私はそれらのスタック内で命名されている自分のアプリケーション内の二つの異なるスポットを見つけるために管理:https://github.com/angular/angular.js/issues/2621:最初のものは、このバグの回避策ですTypeErrorがたくさんあります:fnPtrはangularJsの関数ではありません
を。私はこれが実際にはもはや必要ではないと信じています(角度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回目の出現は、(
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ファイルを単独で使用すると発生します。
checkVisibilityは問題のある箇所ですが、ソースを提供していません。関連するすべてのコードが適切かもしれません。エラースタックを提供してください(それぞれの.jsファイルが独自のものである場合は未解決のアプリケーション用です)、回答者が有用かどうかを判断させてください。 – estus
あなたは何を意味するのか分かりません。投稿した2つのスポットは、angularjsファイルの外の唯一のものです。何を追加すればいいですか? – puelo
ああ、私は今参照してください。一度iamを投稿します。 – puelo