2015-02-28 12 views
9

Tôi đang sử dụng tùy chọn ng-model để ngăn mô hình đầu vào văn bản của tôi được cập nhật cho đến khi tiêu điểm bị mất. Đó là một phần tất cả các công trình. Tuy nhiên, tôi cần xử lý sự kiện sau khi đầu vào văn bản mất tiêu điểm và mô hình được cập nhật. Trong trường hợp đó, tôi cần truy cập vào giá trị cập nhật của mô hình MỚI, chứ không phải giá trị cũ.ng-blur giá trị cập nhật của mô hình không có sẵn trong sự kiện

Tôi đang cố gắng sử dụng sự kiện ng-blur, tuy nhiên, bên trong trình xử lý của tôi giá trị là giá trị cũ, không phải giá trị mới được nhập. Tôi đang làm điều gì đó sai hay là có một cách tốt hơn để có được giá trị mô hình mới được cam kết sau khi đầu vào văn bản mất tập trung?

<input type="text" 
ng-model-options="{ updateOn: 'blur', debounce:0 }" 
ng-model="vm.myModel.amount" 
ng-blur="vm.handleBlurEvent(vm.myModel.amount)" /> 


vm.handleBlurEvent = function(item) 
{ 
      //alert(item.amount); //Old amount - not new amount entered 
} 

Trả lời

3

Cảm ơn những đề xuất đó. Tôi thực sự quản lý để có được điều này để làm việc bằng cách thêm 1 tùy chọn vào thuộc tính updateOn của ng-model-options. Bằng cách thêm vào 'mặc định' mọi thứ đã hoạt động!

ng-model-options = "{updateOn: 'blur mặc định}" là mẹo.

<input type="text" 
ng-model-options="{ updateOn: 'default blur' }" 
ng-model="vm.myModel.amount" 
ng-blur="vm.handleBlurEvent(vm.myModel.amount)" /> 


vm.handleBlurEvent = function(item) 
{ 
      //alert(item.amount); //new shows the NEW amount :-) 
} 
+0

đây là một plunkr tôi tạo ra để chứng minh - thử nó mà không có từ khóa mặc định và nó sẽ không hoạt động - với nó nó sẽ ... http: //plnkr.co/edit/0cIELjdUgic5ffo77Ef4? P = preview – user1750537

+0

Cảm ơn plunkr, thực sự đã giúp gỡ lỗi này! Giải pháp của bạn là một chút thiếu sót mặc dù, thêm 'mặc định' nói với hệ thống phụ "sử dụng hành động updateOn mặc định". Điều tôi nghĩ chúng tôi muốn là trì hoãn cập nhật cho mô hình cho đến khi sự kiện mờ, vì vậy hãy để lại updateOn: 'blur' và sử dụng ng-thay đổi để thực thi chức năng thay vì ng-blur –

0

Cách sử dụng đồng hồ?

Bạn có thể làm logic của bạn sau khi mô hình được cập nhật như thế này:

$scope.$watch('vm.myModel.amount', function (newVal, oldVal) { 
     if (newVal != oldVal) { 
     //do your logic here. 
     } 
    }, true); 
4

Tôi không có may mắn hơn với debounce chưa

nhưng để làm cho mọi việc bạn làm việc ở đây là mã

<form name="amountForm" > 
    <input type="text" name="amount" 
    ng-model-options="{ updateOn: 'blur', debounce:0 }" 
    ng-model="vm.myModel.amount" 
    ng-blur="vm.handleBlurEvent()" /> 
</form> 

vm.handleBlurEvent = function() 
{ 
    alert($scope.amountForm.amount.$viewValue); 
} 

thưởng thức ...

15

này được làm lại từ phản ứng trước bởi user1750537, trì hoãn việc cập nhật mô hình cho đến khi kiểm soát mờ và sau đó xử lý sự thay đổi một lần, không de-thư bị trả lại theo yêu cầu và giá trị mô hình sẽ được thiết lập trước khi Logic thay đổi của bạn như mong đợi.

<input type="text" 
ng-model-options="{ updateOn: 'blur' }" 
ng-model="vm.myModel.amount" 
ng-change="vm.handleChangeEvent(vm.myModel.amount)" /> 

vm.handleChangeEvent = function(item) 
{ 
    alert(item.amount); //new shows the NEW amount :-) 
} 
+0

Cảm ơn Chris - điều đó có ý nghĩa và là thực hiện sạch hơn :-) – user1750537

0

Cũ câu hỏi nhưng tôi đã tìm thấy một cách khác để đọc giá trị này, tôi không thể loại bỏ debounce với sự chậm trễ và những gì làm việc cho tôi đã sử dụng thời gian chờ:

$timeout(function(){ 
    var amount = this.formName.amount.value; 
    }); 

Tôi nghĩ rằng đây = ngModelController ở trên mã.

+1

Điều này nên được coi là một mô hình chống. Nó dẫn đến 'địa ngục hết giờ', nơi nó trở thành không thể dễ dàng lý do về thứ tự các sự kiện trong mã của bạn. Cuối cùng, người dùng của một thành phần áp dụng mẫu chống này sẽ bị buộc phải sử dụng $ timeout. Có bắt đầu cuộc hành trình đến $ timeout địa ngục. – texta83

Các vấn đề liên quan