각도 ng- 변화 지연
변경시 ng-repeat 목록을 필터링하는 입력이 있습니다. 반복에는 많은 데이터가 포함되어 모든 것을 필터링하는 데 몇 초가 있습니다. 필터링 프로세스를 시작하기 전에 0.5 초 지연되고 싶습니다. 이 지연을 생성하는 올바른 각도 방법은 무엇입니까?
입력
<input ng-model="xyz" ng-change="FilterByName()" />
반복
<div ng-repeat"foo in bar">
<p>{{foo.bar}}</p>
</div>
필터 기능
$scope.FilterByName = function () {
//Filtering Stuff Here
});
감사합니다
AngularJS 1.3 이상
AngularJS 1.3부터는 debounce
속성 을 사용하여 매우 쉽게 얻을 수 있습니다 . 예를 들면 다음과 같습니다.ngModelOptions
$timeout
HTML :
<div ng-app='app' ng-controller='Ctrl'>
<input type='text' placeholder='Type a name..'
ng-model='vm.name'
ng-model-options='{ debounce: 1000 }'
ng-change='vm.greet()'
/>
<p ng-bind='vm.greeting'></p>
</div>
JS :
angular.module('app', [])
.controller('Ctrl', [
'$scope',
'$log',
function($scope, $log){
var vm = $scope.vm = {};
vm.name = '';
vm.greeting = '';
vm.greet = function greet(){
vm.greeting = vm.name ? 'Hey, ' + vm.name + '!' : '';
$log.info(vm.greeting);
};
}
]);
-또는-
AngularJS 1.3 이전
지연을 추가하려면 $ timeout을 사용해야하며 $ timeout.cancel (previoustimeout)을 사용하면 이전 제한 시간을 취소하고 새 제한 시간을 실행할 수 있습니다 (필터링이 한 시간 내에 여러 번 연속적으로 실행되는 것을 방지하는 데 도움이됩니다. 시간 간격)
다음은 그 예입니다.
app.controller('MainCtrl', function($scope, $timeout) {
var _timeout;
//...
//...
$scope.FilterByName = function() {
if(_timeout) { // if there is already a timeout in process cancel it
$timeout.cancel(_timeout);
}
_timeout = $timeout(function() {
console.log('filtering');
_timeout = null;
}, 500);
}
});
$timeout
지연을 추가하는 데 사용할 수 있으며 아마도 사용 $timeout.cancel(previoustimeout)
하면 이전 제한 시간을 취소하고 새 제한 시간을 실행할 수 있습니다 (시간 간격 내에서 필터링이 여러 번 연속적으로 실행되는 것을 방지하는 데 도움이 됨)
예:-
app.controller('MainCtrl', function($scope, $timeout) {
var _timeout;
//...
//...
$scope.FilterByName = function () {
if(_timeout){ //if there is already a timeout in process cancel it
$timeout.cancel(_timeout);
}
_timeout = $timeout(function(){
console.log('filtering');
_timeout = null;
},500);
}
});
질문이 너무 오래되었다는 것을 알고 있습니다. 그러나 여전히 디 바운싱을 사용하여이를 달성하는 더 빠른 방법을 제공하고 싶습니다 .
따라서 코드는 다음과 같이 작성할 수 있습니다.
<input ng-model="xyz" ng-change="FilterByName()" ng-model-options="{debounce: 500}"/>
디 바운스는 밀리 초 단위의 숫자를 사용합니다.
또는 angular-ui 에서 'typeahead-wait-ms = "1000"'지시문을 사용할 수 있습니다.
<input
typeahead="name for name in filterWasChanged()"
typeahead-wait-ms="1000"
type="text" placeholder="search"
class="form-control" style="text-align: right"
ng-model="templates.model.filters.name">
참고 URL : https://stackoverflow.com/questions/26446681/angular-ng-change-delay
'IT' 카테고리의 다른 글
한 달에 일수에서 (0) | 2020.07.23 |
---|---|
.NET에서 전달은 어떻게 전달됩니까? (0) | 2020.07.23 |
"svn update"명령을 실행하기 전에 리포지토리에서 업데이트 확인하는 방법은 무엇입니까? (0) | 2020.07.23 |
emacs 자바 확장 모드에서 들여 쓰기 너비를 변경하는 방법 (0) | 2020.07.23 |
reStructuredText에서 강조 인라인 코드 (0) | 2020.07.22 |