Я создаю customdirective и хочу обновить ng-модель перед ng-change fire. В настоящее время ng-change fire перед значением udpate ng-mdoel ниже - это мой код.
Основная проблема возникает, когда я изменяю номер страницы в выпадающем списке. Он предупреждает о предыдущем значении. Я думаю, что обновление ng-mdoel после ng-change fire. но я хочу, чтобы ng-model fire перед ng-change.
app.directive('bottomPagination', function () {
var directive = {
templateUrl: '/App/Common/directives/bottomPagination.html',
restrict: 'A',
replace: true,
scope: {
currentPage: '=',
changePageSize: '&'
}
};
return directive;
});
//here is html directive (/App/Common/directives/bottomPagination.html)
<select id="pagesizeddl" ng-model="pageSize" ng-change="changePageSize()">
<option>5</option>
<option>10</option>
<option>20</option>
<option>30</option>
</select>
// here is my html page where i used directive
<div data-ng-controller="ProductsList as vm">
<div data-bottom-pagination
data-page-size="vm.paging.pageSize"
data-change-page-size="vm.changePageSize()"
>
</div>
</div>
// This is contrller
(function () {
// Start Products List function
var ListControllerId = 'ProductsList';
angular.module('app').controller(ListControllerId,
['$scope', ListController]);
function ListController($scope) {
var vm = this;
vm.paging = {
pageSize: 10
};
vm.changePageSize = changePageSize;
function changePageSize() {
alert(vm.paging.pageSize);
}
}
})();
Привет, у меня была такая же проблема.
Решением моей лучшей практики является добавление параметра в функцию ng-change в шаблон вашей директивы. Вам нужно добавить параметр как объект JSON!
<select id="pagesizeddl" ng-model="pageSize" ng-change="changePageSize({pageSize:pageSize})">
<option>5</option>
<option>10</option>
<option>20</option>
<option>30</option>
</select>
Свойство "pageSize" (объекта JSON) будет сопоставляться с параметром вашей директивной функции vm.changePageSize(pageSize). Поэтому необходимо, чтобы у обоих было одно и то же имя!
<div data-ng-controller="ProductsList as vm">
<div data-bottom-pagination
data-page-size="vm.paging.pageSize"
data-change-page-size="vm.changePageSize(pageSize)"
>
</div>
Теперь вам нужно только изменить функцию контроллера следующим образом:
function changePageSize(pageSize) {
alert(pageSize);
}
$watch
наpageSize
а затем вызватьchangePageSize
в этом ...ng-change
чтобы увидеть, пытаетесь ли вы вручную обновить связанную модель.