ho una direttiva definita in questo modo:AngularJS vs TemplateURL nella direttiva
app.directive('itemComments', ['ajax', function(ajax) {
return {
restrict: 'A',
templateUrl: URL + 'public/Pages/Homepage/ajax/getCommentsTpl',
controller: 'ItemLibraryController',
controllerAs: 'itemLibraryCtrl',
link: function(scope, element, attr) {
var $element = $(element);
scope.$watch(function(scope) {
return $element.find('li').length > 0;
}, function(finished) {
if(finished) {
autosize($element.find('textarea'));
}
});
}
};
}]);
Il modello specificato dal "templateUrl"
restituisce qualcosa di simile:
...
<textarea class="form-control textarea-resize" ng-keyup="commentPost($event)" ng-model="textComment"></textarea>
...
In ItemLibraryController ho definito il metodo commentPost () a cui si accede tramite keyup su textarea. Il problema è che $scope.textComment = undefined
invece del valore inserito nella textarea. Se modifico in html ng-model="$parent.textComment"
, il valore dalla textarea si trova in $scope.textComment
.
PS. Quando si utilizza "template" anziché "templateUrl" nella definizione della direttiva, il problema del modello ng scompare.
Le mie domande sono:
Perché devo usare $ parent.textComment dal momento che il campo di applicazione del modello è l'ItemLibraryController?
Perché utilizzare templateUrl crea un altro ambito per i modelli di ng all'interno del modello?
Perché, quando si utilizza "modello" anziché "templateUrl" nella definizione direttiva, il problema del modello ng scompare?
Come posso accedere a textComment senza utilizzare $ parent.textComment?
come è definito il valore di 'textComment' portata genitore, utilizzando' $ scope.textComment' o 'this.textComment'? –
uso $ scope.textComment – Bogdan