0

我是 Ionic-angular.js 的新手,希望有人能帮我解决这个问题

首先,这里是代码

收藏夹.html

  ...
<ion-item ng-repeat="dish in dishes | favoriteFilter:favorites" href="#/app/menu/{{dish.id}}" class="item-thumbnail-left" on-swipe-left="deleteFavorite(dish.id)">
        <img ng-src="{{baseURL+dish.image}}" on-swipe-left="deleteFavorite(dish.id)">
        <h2>{{dish.name}}
        <ion-delete-button class="ion-minus-circled"
          ng-click="deleteFavorite(dish.id)">
        </ion-delete-button>
      </ion-item>
...

服务.js

.factory('favoriteFactory', ['$resource', 'baseURL', function ($resource, baseURL) {
        var favFac = {};
        var favorites = [];

        favFac.addToFavorites = function (index) {
            for (var i = 0; i < favorites.length; i++) {
                if (favorites[i].id == index)
                    return;
            }
            favorites.push({id: index});
        };

        favFac.deleteFromFavorites = function (index) {
            for (var i = 0; i < favorites.length; i++) {
                if (favorites[i].id == index) {
                    favorites.splice(i, 1);
                }
            }
        }

        favFac.getFavorites = function () {
            return favorites;
        };

        return favFac;
        }])

    .factory('$localStorage', ['$window', function($window) {
        return {
        store: function(key, value) {
          $window.localStorage[key] = value;
        },
        get: function(key, defaultValue) {
          return $window.localStorage[key] || defaultValue;
        },
        storeObject: function(key, value) {
          $window.localStorage[key] = JSON.stringify(value);
        },
        getObject: function(key,defaultValue) {
          return JSON.parse($window.localStorage[key] || defaultValue);
        }
        //removeItem: function(key){
        //    $window.localStorage.removeItem(key);
        //}
      }

控制器.js

.filter('favoriteFilter', 'localStorage', function (localStorage) {

            if(localStorage.getItem('favorites')!=undefined)
                {
                    var out = [];
                    return out;
                }
            else{
                return function (dishes) {
                var old_favorite = JSON.parse($localStorage.get('favorites'));
                var leng = Object.keys(old_favorite).length;
                console.log(leng);

                var out = [];
                for (var i = 0; i < leng; i++) {
                    for (var j = 0; j < dishes.length; j++) {
                        if (dishes[j].id === favorites[i].id)
                            out.push(dishes[j]);
                    }
                }
                return out;
                }}
});

例如,在 localstorage 中有一个数组,如下所示

Key : favorites
value : [{"id":1},{"id":2},{"id":0}]

所以,逻辑是,我根据过滤器功能比较数据库和本地存储之间的 ID

如果 ID 相同,则数据库中的数据会将其推送到收藏夹菜单中。

但是,它无法显示在收藏夹菜单中,当我在控制台上查看时,它说

[ng:areq] 参数 'fn' 不是函数,得到字符串

我在这里做错了吗?还是我在这里放错了方法?

先感谢您。

4

2 回答 2

1

您提出的错误似乎是语法问题。您缺少数组括号。

.filter('favoriteFilter', ['$localStorage', function (localStorage) {

        if(localStorage.getItem('favorites')!=undefined)
        {
            var out = [];
            return out;
        }
        else
        {
            return function (dishes) {
                var old_favorite = JSON.parse($localStorage.get('favorites'));
                var leng = Object.keys(old_favorite).length;
                console.log(leng);

                var out = [];
                for (var i = 0; i < leng; i++) {
                    for (var j = 0; j < dishes.length; j++) {
                        if (dishes[j].id === favorites[i].id)
                            out.push(dishes[j]);
                    }
                }
                return out;
            }
        };
}]);

我没有检查您的逻辑功能,这将是解决您错误的答案。

于 2016-02-24T05:52:43.030 回答
0

尝试不同的方法:

由于您已经拥有 addToFavorites 和 deleteFromFavorites 函数,您只需按照以下 3 个步骤操作:

  1. 定义“收藏夹”数组时,只需将其分配如下: var favorites = JSON.parse(window.localStorage['favorites'] || []);

  2. 在 addToFavorites 函数中,将添加的项目推送到数组后,添加: window.localStorage['favorites'] = JSON.stringify(favorites);

  3. 在您的 deleteFromFavorites 函数中,拼接数组后,添加: window.localStorage['favorites'] = JSON.stringify(favorites);

这三个超级简单的步骤你应该很好!

于 2016-03-17T16:32:57.400 回答