开发者社区> 问答> 正文

有关于angular里$.post无法绑定到$scope里($.post、$http.post用法区别)

如下所示,如果$scope.equipments=...那一段,放在$.post里就不能绑定到$scope.equipments上,如果放在外面就可以,这是为什么?

mainApp.controller('equipmentsController', function($scope, $http) {
    $.post("getAllDeviceList.action",
            {},
            function(response){
                    $scope.equipments = [ {
                        "id" : "1",
                        "name" : "equipment01 ",
                        "number" : "11"
                    }, {
                        "id" : "2",
                        "name" : "equipment02 ",
                        "number" : "22"
                    }, {
                        "id" : "3",
                        "name" : "equipment03 ",
                        "number" : "33"
                    } ];

            }
    );

    $scope.equipments = [ {
        "id" : "1",
        "name" : "equipment01 ",
        "number" : "11"
    }, {
        "id" : "2",
        "name" : "equipment02 ",
        "number" : "22"
    }, {
        "id" : "3",
        "name" : "equipment03 ",
        "number" : "33"
    } ];

}

展开
收起
爵霸 2016-03-05 11:01:36 2499 0
1 条回答
写回答
取消 提交回答
  • 经过@lee1994522 的提醒,意识到如果用了$.post方法,那么脱离了angular的上下文,所以无法绑定到angular的$scope里。

    `this is the point,pls.. $.post is not an Angular issue and the stuff
    it wraps is not in an Angular world,so it's obviously that the
    equipments outside is in Angular's world and it works as you expect

    try $scope.$apply() when you call a "none Angular" issue if you wanna

    refresh sth`
    解决办法有两个:

    $.post
    第一个诚如@lee1994522所说,直接在$.post的回调函数的最后加上一句$scope.$apply(),把改变同步绑定到视图上

    $.post("xxx.action",
                {},
                function(response){
                    if(response.result == "success"){
                        ...
                        }
                        $scope.equipments = equipments; 
                        $scope.$apply();
                    }
                },
                "json"
        );
    $http.post
    AngularJS - Any way for $http.post to send request parameters instead of JSON

    全局里定义:

    var app = angular.module('myApp');
    
    app.config(function ($httpProvider) {
        $httpProvider.defaults.transformRequest = function(data){
            if (data === undefined) {
                return data;
            }
            return $.param(data);
        }
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    });

    然后控制器里面写:

    $http.post("xxx.action").success(function(response) {  
                ...
                $scope.equipments = equipments; 
        });
    2019-07-17 18:53:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路 立即下载
AutoAlerts-From Data to Action 立即下载
低代码开发师(初级)实战教程 立即下载