没有刷新的侦听事件和更新页面

时间:2017-03-22 22:11:14

标签: javascript angularjs

我发现一个特定的逻辑问题有点困难。我的问题是这样的:

我通过一些工厂方法从控制器内发送PUT请求。我想更新数据而不需要任何页面刷新。例如。 $ state.go()或$ location.path()等。对于POST和DEL,我做过类似的事情:

$scope.$on('itemRemoved', (e, item) => {
    vm.allItems = vm.allItems.filter(item => {
        item._id !== item._id)
       })
    })
$scope.$on('itemAdded', (e, item) => vm.allItems.push(item))
      
// For PUT, I want to do something like this..

 $scope.$on('itemUpdt', (e, item) => {
    vm.allItems.push(item).findIndex('index of oldItem').splice('exclude oldItem index').join(',')
  })

'item'是从ajax调用返回的对象数组。上述方法对我不起作用。是否有问题或有更好的方法来解决这个问题?感谢阅读:)

2 个答案:

答案 0 :(得分:1)

JavaScript函数user_email实际上返回数组的新长度,而不是数组本身。因此,在push()的返回值上调用findIndex()可能会导致您的问题。

答案 1 :(得分:1)

您可以尝试这样的事情:

$scope.$on('itemUpdt', (e, item) => {
    vm.allItems = vm.allItems.filter(item => {
        item._id !== item._id;
    });
    vm.allItems.push(item);
});

const findIndex = (array, item) => {
    for(let i=0; i<array.length; i++){
        if(array[i]._id == item._id){
            return i;
        }
    }
    return -1
};

$scope.$on('itemUpdt', (e, item) => {
    var indexToRemove = findIndex(vm.allItems, item);
    vm.allItems.splice(indexToRemove, 1);
    vm.allItems.push(item);
});