Podczas próby zdefiniowania właściwości zakresu lokalnego okazało się, że właściwości zdefiniowane za pomocą '@' nie są dostępne bezpośrednio w funkcji łącza, podczas gdy nie jest to właściwość sprawa opisanymi z '=' lub '&'Kątowa: właściwość zakresu lokalnego zdefiniowana za pomocą '@' nie jest dostępna z funkcji łącza
Oto prosty dyrektywa pisałem (jsfiddle):
angular.module('test', [])
.controller('testCtrl', function($scope) {
$scope.count1 = 5;
})
.directive('testDir', function() {
return {
restrict: 'A',
scope: {
count: '=',
readonly: '@'
},
link: function (scope, elem, attrs) {
console.log('Outside has count? '+('count' in scope));
console.log('Outside has readonly? '+('readonly' in scope));
scope.$watch('count', function(value){
console.log('Inside has count? '+('count' in scope));
console.log('Inside has readonly? '+('readonly' in scope));
elem.text(value);
});
}
};
});
wyjście jest:
Na zewnątrz ma "liczyć"? true
Na zewnątrz jest "tylko do odczytu"? false
Wewnątrz ma "count"? true
Wewnątrz ma "tylko do odczytu"? prawda
Nie mam pojęcia, dlaczego scope.readonly (@) nie jest zdefiniowany poza zasięgiem. Funkcja zegarka, podczas gdy nie jest to w przypadku scope.count (=)?