コントローラ関数内のディレクティブの属性にアクセスしようとしています。しかし、私がアクセスするまでには未定義です。私はそれが動作する単純なタイマーを行う場合気づいた。ディレクティブとそのスコープの準備ができて使用されるように設定された後にのみコードを実行する方法はありますか?AngularJSディレクティブは、コントローラからのアクセスを属性にします。
私はそれを使って手品を作りました。コンソールが開いていることを確認してください。あなたがリンクとコントローラ機能内
scope.text = $attrs.text;
を設定した場合、どのように動作することは、ある
<div ng-app="testApp" >
<testcomponent text="hello!"></testcomponent>
</div>
var module = angular.module('testApp', [])
.directive('testcomponent', function() {
return {
restrict: 'E',
template: '<div><p>{{text}} This will run fine! </p></div>',
scope: {
text: '@text'
},
controller: function ($scope, $element) {
console.log($scope.text); // this will return undefined
setTimeout(function() {
console.log($scope.text); // this will return the actual value...
}, 1000);
},
link: function ($scope, $element, $attrs) {
console.log($scope.text);
setTimeout(function() {
console.log($scope.text);
}, 1000);
}
};
});
うんを、私の作品:)感謝の男 – PCoelho
これは、リンティングを失敗します:タイムアウトなしのコードを以下により
controller
から属性値を取得するとき、私は何の問題もありません。 'attrs.text'は不明です。 –@DougChamberlain JSDocを使ってそのことを知ることができます。 '' @param {string} attrs.text''のようなものがあなたの問題を解決するはずです。 –