gpt4 book ai didi

javascript - 扩展 $firebaseArray 以使用 $filter

转载 作者:行者123 更新时间:2023-11-28 00:15:11 31 4
gpt4 key购买 nike

第二次编辑:现在的问题是无法将 $scope.hashtag 传递给 hashFilter 回调函数。很近!

进展编辑:我真的很接近破解这个问题,但不知道如何在 $scope 更改时重新运行过滤器。 $watch 似乎不起作用。

这是一个带有新 $extend $firebaseArray 示例的 plnkr: http://plnkr.co/edit/RUwL0Cstm9c8jhI2VGi9?p=preview

我只需要在 $scope.hashtag 更改时重新运行它。

//Factory
app.factory('FilteredArray', function($firebaseArray){
var FilteredArray = $firebaseArray.$extend({
$$added: function(snap) {
var rec = $firebaseArray.prototype.$$added.call(this, snap);
if( !this.filterFn || this.filterFn(rec) ) {
return rec;
}
},
filter: function(filterFn) {
this.filterFn = filterFn;
}
});

return function(listRef){
return new FilteredArray(listRef);
};

});

//Controller
var ref = new Firebase("https://plnkr.firebaseio.com/things");

$scope.things = new FilteredArray(ref);
$scope.things.filter(hashFilter);

$scope.hashtag = 'something';

function hashFilter(rec) {
console.log('hashFilter ran');
var result = false;
angular.forEach(rec, function(value, key, obj) {
if (obj.hashtag) {
if (obj.hashtag == $scope.hashtag) {
console.log(obj.hashtag == $scope.hashtag);
result = true;
}
}
});
return result;
}

原帖:我试图从我的 Controller 中 $filter 一个 $firebaseArray 但无法让它工作。

在 View 中,一切都像这样运行良好(简化):

ng-repeat = "thing in things | filter: 'something'"

不幸的是,在 Controller 中:

$scope.things = $filter('filter')(theUnfilteredFirebaseArray, 'something');

不起作用。我认为这与 $firebaseArray 有关,但我不确定。

数据结构如下:

things: {
thingID1: {
something: 'value';
},
thingID2: {
something: 'value'
},
...
}

我偶然发现了 Kato 的这篇文章,但我不知道如何在这里实际应用过滤器:https://gist.github.com/katowulf/bee266e31aa60cb0eed6

有人可以给我指出正确的方向吗?

这是 plnkr 的链接:http://plnkr.co/edit/RUwL0Cstm9c8jhI2VGi9?p=preview

最佳答案

可能是因为数据尚未加载。试试这个:

var theUnfilteredFirebaseArray = $firebaseArray(...);

theUnfilteredFirebaseArray.$loaded(function(){
$scope.things = $filter('filter')(theUnfilteredFirebaseArray, 'something');
});

为什么要在 Controller 中进行过滤?在 dom 中执行此操作意味着您不必执行此操作。

关于javascript - 扩展 $firebaseArray 以使用 $filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517448/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com