我有一個指令定義是這樣的:AngularJS模板VS templateURL
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'));
}
});
}
};
}]);
通過"templateUrl"
回報像這樣指定的模板:
...
<textarea class="form-control textarea-resize" ng-keyup="commentPost($event)" ng-model="textComment"></textarea>
...
在ItemLibraryController我已經定義的方法commentPost( )可以在textarea的keyup上訪問。 問題是$scope.textComment = undefined
而不是在textarea中輸入的值。如果我在html ng-model="$parent.textComment"
中修改,那麼textarea中的值可在$scope.textComment
中找到。
PS。在指令定義中使用「template」而不是「templateUrl」時,ng模型問題會消失。
我的問題是:
爲什麼我必須使用$ parent.textComment因爲模板是ItemLibraryController的範圍是什麼?
爲什麼使用templateUrl爲模板內的ng模型創建另一個範圍?
爲什麼在指令定義中使用「template」而不是「templateUrl」時,ng模型問題會消失?
如何在不使用$ parent.textComment的情況下訪問textComment?
你如何定義'textComment'的父範圍使用'$ scope.textComment'或'this.textComment'值,? –
我使用$ scope.textComment – Bogdan