Próbuję uzyskać dostęp do atrybutów dyrektywy w funkcji kontrolera. Jednak do czasu uzyskania dostępu do niego jest on niezdefiniowany. Zauważyłem, że jeśli wykonuję prosty timer, działa. Czy istnieje sposób na wykonanie kodu tylko po dyrektywie, a jego zakresy są gotowe i gotowe do użycia?Dyrektywy AngularJS przypisują dostęp do kontrolera
Zrobiłem z nim skrzypce. Upewnij się, że konsola jest otwarta. http://jsfiddle.net/paulocoelho/uKA2L/1/
Oto kod używam na skrzypcach:
<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);
}
};
});
Tak, pracuje dla mnie :) dzięki mężczyzna – PCoelho
to zawiedzie strzępienie. ponieważ 'attrs.text' jest nieznany. –
@DougChamberlain Możesz użyć JSDoc, aby obejść to. Coś jak '' @param {string} attrs.text'' powinno rozwiązać twój problem. –