【问题标题】:How to use slice() method pn object array in angularJS如何在angularJS中使用 slice() 方法 pn 对象数组
【发布时间】:2016-04-20 11:19:03
【问题描述】:

我正在尝试在 AngularJS 中的对象数组上使用 slice() 方法,但它说“切片不是方法”。

这里是代码

.controller('AppCtrl', function ($scope, Faq) {

    $scope.filteredFaqData = [];
    $scope.currentPage = 1;
    $scope.numPerPage = 5;
    $scope.maxSize = 3;
    $scope.faqData = {};
    Faq.get().then(function (msg) {
        $scope.faqData = msg.data;

    });
    $scope.$watch('currentPage + numPerPage', function () {
        var begin = (($scope.currentPage - 1) * $scope.numPerPage)
        , end = begin + $scope.numPerPage;

        $scope.filteredFaqData = $scope.faqData.slice(begin, end);
    });

});

我正在使用服务从 $scope.faqData 的 json 文件中获取数据,并且它正在工作。

但是 slice 方法在控制台中不起作用,它给出错误 "$scope.faqData.slice" is not a method.

【问题讨论】:

  • faqData 是一个对象。 $scope.faqData = {};。除非您的服务正在改变它。 Slice 是数组可用的方法。 (尽管从技术上讲,数组是一个具有数字属性键并且与 length 有特殊关系的对象,但你明白我的意思)
  • @ste2425 我的服务正在改变它。这里.factory('Faq', function ($http) { return { get: function () { console.log("inside function"); return $http.get('/Json/faq.json'); } }; })。该服务正在返回一个对象数组
  • 当你的 watcher 触发时你的 promise 已经解决了吗?也许您应该将 faqData 变量默认为您打算使用的类型。如果手表在承诺解决之前被触发,您将尝试在一个对象上调用.slice,因为它当时还没有发生变异。
  • @ste2425 你说得对,我的观察者在我的承诺得到解决之前就被解雇了。谢谢。
  • 如果这解决了您的问题,请在以后将其添加为其他人的答案。

标签: javascript arrays angularjs


【解决方案1】:

.slice 是数组原型中可用的方法。

你的 faqData 被定义为一个普通的 'ol 对象。因此它无权访问.slice

您的服务正在将 faqData 变异为一个数组,但允许您访问 .slice,这仅在它解决时。


因此,问题是您的观察者可能会在您的承诺解决之前触发,这意味着您尝试从普通对象调用 slice

您应该将您的对象定义为您将使用它们的类型,尽可能避免改变对象。

您的 watch 可能还需要处理您的 promise 尚未解决的事实,这取决于您打算在 watcher 中做什么。

slice docs

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 2014-06-09
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多