天天看點

【曹操】 angular js雙向綁定資料通過bootstrap請求擷取不到表單資料

1、檢視代碼邏輯

controller的請求代碼:

      //跳轉vidyoname初始化table

       var name = $routeParams.name;  //路由中擷取到傳入的name值

       if(name) {  //如果name變量有值

           console.log("name:"+name);  //列印name變量

           $scope.flag = false;  

           $scope.vidyocallflow.vidyoname = name;  //動态綁定将name變量的值賦給作用域集合中vidyoname元素

           console.log("vidyocallflow.vidyoname="+$scope.vidyocallflow.vidyoname);  //列印作用域集合中vidyoname元素

           console.log($scope.vidyocallflow);  //列印作用域集合

           console.log($('#vidyoCallFlowForm'));  //列印表單

       btTable.searchDate('vidyoCallFlowForm','/ccao/media/vidyocallflow/query.do');  //通過bootstrap自帶的請求searchDate方法将url和表單作為參數,請求到背景。

       }

btTable.searchDate方法:

    //formId 搜尋資料的表單;為空時,傳NULL

    bootObject.searchDate = function(formId,url) {

        console.info('url:'+url);

        var searchData;

        if(formId==null){

            searchData=null;

        }else{

            searchData = $('#' + formId + '').serialize();  //通過上傳的表單id擷取表單中的所有值

        }

        var tmp = '?';

        /*if(url.contain('?')|| url.contain("&")){

            tmp = '';

        }*/

        $('#' + tableId + '').bootstrapTable('refresh', {

            url : '' + url + tmp + searchData,

        })  //bootstrap表格自帶請求并填充表格的方法

    };

2、通過日志列印,發現綁定的作用域集合vidyoname有值,且作用域集合和表單列印出來,其中的vidyoname都有值,在彈出的VidyoCallFlow頁面的name的input框中也有資料填充,說明雙向綁定指派是成功的,但是在使用 btTable.searchDate方法,傳入表單名和url時,查詢不到結果,且發現請求到背景的url為:"url:/ccao/media/vidyocallflow/query.do?vidyoname=",參數vidyoname沒有值帶入,通過背景日志發現确實該請求沒有參數傳到背景,也說明了在使用bootstrap自帶請求方法時,沒有從表單中擷取到vidyoname的值,是以請求沒有攜帶該參數的值。

3、但是再次通過點選VidyoCallFlow頁面的搜尋按鈕時,觸發頁面的點選事件,該事件執行的請求方法與跳轉請求的方法相同,同為bootstrap自帶的請求方法,但是傳入背景參數有值,且查詢有結果。

4、原因:在路由跳轉雙向綁定資料時,存在通過jquery擷取不到表單中元素的值的問題,後采用jquery指派的方法替代将雙向綁定的方法:

       //跳轉vidyoname初始化table

       var name = $routeParams.name;

       if(name) {

           console.log("name:"+name);

           $scope.flag = false;

           $('#vidyoname').val(name);  //jquery指派

       btTable.searchDate('vidyoCallFlowForm','/ccao/media/vidyocallflow/query.do');       

}

5、查詢成功,跳轉擷取到頁面查詢結果。

繼續閱讀