我有一个输入,可以根据更改过滤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);
}
});
我正在编写一个具有属性的角度组件。 我希望能够以编程方式设置此属性,而不是响应任何事件。 问题是在没有浏览器事件的情况下,模板绑定不会更新。 是否有办法手动触发此更改检测?
问题内容: 如何在Angular中使用多个变量,并在其中之一发生更改时触发回调。 问题答案: 更新 Angular现在提供了两种范围方法$ watchGroup (从1.3开始)和$watchCollection。这些已被@blazemonger和@kargold提及。 这应该独立于类型和值而工作: 在这种情况下,您必须将第三个参数设置为true。 在这种情况下,字符串连接将失败: 在用户单击按钮
我有一个父组件(CategoryComponent)、一个子组件(videoListComponent)和一个APIService。 我的大部分工作都很好,即每个组件都可以访问json api,并通过Observables获取其相关数据。 当前video list组件只获取所有视频,我想将其筛选为特定类别中的视频,我通过将categoryId传递给子对象实现了这一点。 CategoryCompon
我需要在基于url的懒惰模块中加载详细信息。所以,我使用了懒惰的辅助路由。但是,当我使用辅助路由时,我面临以下问题。 错误错误:未捕获(promise中):错误:无法匹配任何路线。URL段:“lazy/aux1”错误:无法匹配任何路由。URL段:ApplyRedirects.noMatchError处的“lazy/aux 1”(https://lazy-load-auxiliary-b7vpg-e
应用程序模块: app-routing.module.ts: 实体/实体-routing.module.ts: 实体/实体.组件. ts: 我还尝试使用以下方法在实体模块中定义路由,但组件仍会显示为导航到 /list,而不是 /entities/list。 我做错了什么?任何帮助是值得赞赏的!
AngularJS自1.3.0-beta.10版本以来有一个新功能:“惰性一次性绑定”。 简单表达式的前缀可以是<代码>:: ,告诉angular在首次计算表达式后停止监视。给出的常见示例如下: 下面的表达式有类似的语法吗?