私が使用している正確なディレクティブは次のとおりです。
'use strict';
angular.module('App')
.directive('aView', function ($stateParams) {
this.link = function(scope, template, directiveAttrs){
template.addClass(scope.elem.classes);
}
return {
template: '<div ng-transclude></div>',
restrict: 'E',
replace: true,
scope: {elem: '='},
compile: function(template){
return function(scope, template, directiveAttrs){
template.addClass(scope.elem.classes);
}
}
}
});
これにより、次のエラーが表示されます。
TypeError: Cannot set property 'link' of undefined
at http://localhost:9000/scripts/directives/aView.js:5:15
at Object.invoke (http://localhost:9000/bower_components/angular/angular.js:2990:25)
at http://localhost:9000/bower_components/angular/angular.js:3894:43
at Array.forEach (native)
at forEach (http://localhost:9000/bower_components/angular/angular.js:130:11)
at Object.<anonymous> (http://localhost:9000/bower_components/angular/angular.js:3892:13)
at Object.invoke (http://localhost:9000/bower_components/angular/angular.js:3000:28)
at http://localhost:9000/bower_components/angular/angular.js:2838:37
at Object.getService [as get] (http://localhost:9000/bower_components/angular/angular.js:2960:39)
at addDirective (http://localhost:9000/bower_components/angular/angular.js:4609:51)
これの奇妙な点は、このディレクティブの返された構成オブジェクト内のどこにも this.link() 関数を参照していないことです。また、なぜ未定義になるのですか? 私の指示は、アグヘッドのレッスン 25 のほぼ正確なコピーです。
ここで、this.link() 関数をコメントアウトすると、一連のエラーが表示されます。
10 x :
TypeError: undefined is not a function
at new ngDirective.controller (http://localhost:9000/bower_components/angular/angular.js:14357:5)
at invoke (http://localhost:9000/bower_components/angular/angular.js:3000:28)
at Object.instantiate (http://localhost:9000/bower_components/angular/angular.js:3012:23)
at http://localhost:9000/bower_components/angular/angular.js:4981:24
at http://localhost:9000/bower_components/angular/angular.js:4560:17
at forEach (http://localhost:9000/bower_components/angular/angular.js:137:20)
at nodeLinkFn (http://localhost:9000/bower_components/angular/angular.js:4545:11)
at compositeLinkFn (http://localhost:9000/bower_components/angular/angular.js:4191:15)
at compositeLinkFn (http://localhost:9000/bower_components/angular/angular.js:4194:13)
at publicLinkFn (http://localhost:9000/bower_components/angular/angular.js:4096:30) angular.js:5930
Error: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: [a lot of code here]...
...debug.watchPerf[watchStr].calls += 1;\n return ret;\n }; newVal: undefined; oldVal: undefined"]]
at Error (<anonymous>)
at Object.Scope.$digest (http://localhost:9000/bower_components/angular/angular.js:8126:19)
at Object.$delegate.__proto__.$digest (<anonymous>:844:31)
at Object.Scope.$apply (http://localhost:9000/bower_components/angular/angular.js:8304:24)
at Object.$delegate.__proto__.$apply (<anonymous>:855:30)
at http://localhost:9000/bower_components/angular/angular.js:9669:36
at completeOutstandingRequest (http://localhost:9000/bower_components/angular/angular.js:3139:10)
at http://localhost:9000/bower_components/angular/angular.js:3433:7
何が起こっている?私の this.link 関数への不思議な依存関係が角度内に現れましたか?
ところで、この関数の名前は関係ありませんが、参照として別の名前でエラーが表示されます。
ところで、私のスタックは次のとおりです。プロジェクトはyo angular generatorで作られています。
BTW3、このディレクティブをいじり始める前に、もともと yo angular:directive で生成されたものにはリンクがありました: function postLink(scope, element, attrs)これが重要な場合。
時間をありがとう、
ジャレッド