Tôi đã một chỉ thị được định nghĩa như thế này:AngularJS mẫu vs templateURL trong chỉ thị
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'));
}
});
}
};
}]);
Mẫu theo quy định của "templateUrl"
lợi nhuận một cái gì đó như thế này:
...
<textarea class="form-control textarea-resize" ng-keyup="commentPost($event)" ng-model="textComment"></textarea>
...
Trong ItemLibraryController tôi đã xác định phương pháp commentPost () được truy cập trên keyup trên textarea. Vấn đề là $scope.textComment = undefined
thay vì giá trị được nhập trong vùng văn bản. Nếu tôi sửa đổi trong html ng-model="$parent.textComment"
thì giá trị từ vùng văn bản được tìm thấy trong $scope.textComment
.
PS. Khi sử dụng "template" thay vì "templateUrl" trong định nghĩa chỉ thị, vấn đề ng-model biến mất.
Câu hỏi của tôi là:
Tại sao tôi phải sử dụng $ parent.textComment từ phạm vi của mẫu là ItemLibraryController?
Tại sao sử dụng templateUrl tạo một phạm vi khác cho các mô hình ng bên trong mẫu?
Tại sao, khi sử dụng "mẫu" thay vì "templateUrl" trong định nghĩa chỉ thị, vấn đề ng-model biến mất?
Tôi làm cách nào để có thể truy cập vào tính năng nhận dạng văn bản mà không cần sử dụng $ parent.textComment?
cách bạn định nghĩa giá trị của 'textComment' trong phạm vi phụ huynh, sử dụng' $ scope.textComment' hoặc 'this.textComment'? –
tôi sử dụng $ scope.textComment – Bogdan