angular.js - angular雙向綁定機制異常
黄舟
黄舟 2017-05-15 17:02:56
0
1
823
目前项目为当页面应用admin,因为使用angular不是很多,但也做过一个项目。属于原理不是很懂,但大概怎么知道使用的水平。
最近遇见了一个让我比较差异的问题。一直找不到问题的所在所以来此求angular的点评下我的异常,或者说angular的双向绑定机制。

很简单的一个table列表,我目前的增删改查的功能大概步骤是这样的:
查询:查询
新增:新增----新增成功后再一次调用一次查询,实现了添加数据后立马列表就成功显示出来了不需要刷新。
修改,删除也是和新增一样,成功后再一次调取查询,更新一下数据列表。
代码如下: `

angular.module('index_area').controller('GoodlistCtrl',GoodlistCtrl);
GoodlistCtrl.$inject = ['$state','GoodResource','PublicResource',"$stateParams"];
function GoodlistCt state,GoodResource,PublicResource,$stateParams) {

document.title ="基础商品列表";
var vm = this;
vm.pagecount;                                                           //分页总数
vm.pageint=1;                                                           //当前分页导航
vm.skip=0                                                               //从第几个开始
vm.limit=12;                                                            //从第几个结束
vm.list;

//获取页面坐标
vm.index=$stateParams.index;    
PublicResource.navclass(vm.index)


//分页点击事件
vm.pageChanged = function(){
    
}
//获取sessionId
vm.seid=PublicResource.seid("cw19931024");


//新增商品
vm.addinfo = function(list){
    GoodResource.addlist(list,vm.seid).then(function(data){
        console.log(data)
    })
}

//查询基础商品列表
info_list(vm.seid);

/**
    • 基礎商品集合

    • @param {Object} seid
      */

    1. info_list(){

          GoodResource.list(vm.seid,vm.skip,vm.limit).then(function(data){
             vm.list=data.result;
             console.log(data.result)
         })

      }

      vm.getmack = function(id){

         $state.go("/good/format",{"id":id})

      }

      vm.delinfo = function(id){

         layer.confirm('您确定要删除数据?', {
               btn: ['确定','取消'] //按钮
         }, function(){
             remove(id);
         });

      }

    2. remove(id){

         GoodResource.dellist(vm.seid,id).then(function(data){
             console.log(data)
              if (data.status=="OK") {                    
                 layer.msg('删除成功~', {icon: 1});
                 info_list(vm.seid);
                 layer.closeAll();
             } else{
                 layer.msg('删除异常,请联系管理员~', {icon: 0});
             }
         })

      }
      }

    `
    可以看出刪除在刪除程式碼:
    `function remove(id){

        GoodResource.dellist(vm.seid,id).then(function(data){
            console.log(data)
             if (data.status=="OK") {                    
                layer.msg('删除成功~', {icon: 1});
                info_list(vm.seid);
                layer.closeAll();
            } else{
                layer.msg('删除异常,请联系管理员~', {icon: 0});
            }
        })
    }`

    當我判斷成功後立刻info_list()呼叫了一次查詢,但是結果卻是頁面的資料沒有及時更新,而是我第二次觸發刪除的時候他才更新了之前的資料。
    請問這個問題是什麼原因呢?是因為angluar的渲染機制嗎?但是為什麼我新增或查詢的時候它能及時更新過來呢?

    這是返回查詢的最新數據,顯示我確實是刪除成功了,但是為什麼就是無法同步就刷新呢?

    黄舟
    黄舟

    人生最曼妙的风景,竟是内心的淡定与从容!

    全部回覆(1)
    给我你的怀抱

    謝邀吧!不過,你這程式碼貼的,我都醉了,還真是難看懂。

    大概理了一下,你可以試著改改:

    GoodlistCtrl.$inject = ['$scope', '$state','GoodResource','PublicResource',"$stateParams"];
    
    function GoodlistCtrl($scope, $state,GoodResource,PublicResource,$stateParams) {
    
        function info_list(){
            GoodResource.list(vm.seid,vm.skip,vm.limit).then(function(data){
               vm.list=data.result;
               $scope.$apply();
               console.log(data.result);
            });
        }
    }
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板