首页 > 技术文章 > angularjs数据交互

tianranhui 2018-07-19 00:17 原文

异步问题
ajax异步请求数据
完数据后给$scope赋值的时候需要检查$scope的数据更新没有。要不然无法绑定数据。
<!DOCTYPE html>
<html ng-app="test_ajax">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="angular.js" charset="utf-8"></script>
        <script src="jquery.js"></script>
    <script>
    let mod=angular.module('test_ajax', []);
    mod.controller('main', function ($scope){
      $.ajax({
        url: 'arr.txt',
        dataType: 'json',
        success(res){
          $scope.arr=res;
          $scope.$apply(); //检查
        },
        error(){
          alert('错了');
        }
      });
    });
    </script>
  </head>
  <body ng-controller="main">
    <ul>
      <li ng-repeat="a in arr">{{a}}</li>
    </ul>
  </body>
</html>
$scope.$apply(); //检查


angularjs方法Post方法请求数据

<!DOCTYPE html>
<html ng-app="test">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="angular.js" charset="utf-8"></script>
    <script>
    let mod=angular.module('test', []);

    mod.config(function ($httpProvider){
      $httpProvider.defaults.transformRequest=function (obj){
        let arr=[];
        for(let name in obj){
          arr.push(`${name}=${obj[name]}`);
        }
        return arr.join('&');
      };

      $httpProvider.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded';
    });

    mod.controller('main', function ($scope, $http){
      $scope.calc=function (){
        $http({
          method: 'POST',
          url: '1.php',
          data: {
            a: $scope.a,
            b: $scope.b
          }
        }).then(res=>{
          alert(res.data);
        }, ()=>{
          alert('错了');
        });
      };
    });
    </script>
  </head>
  <body ng-controller="main">
    <input type="text" ng-model="a">
    <input type="text" ng-model="b">
    <input type="button" value="计算" ng-click="calc()">
  </body>
</html>

为啥POST出问题
AngularJS用的是 application/json  的编码格式大多浏览器不认, 编码格式改成application/x-www-form-urlencoded的编码格式。



angularjs方法get方法请求数据
<!DOCTYPE html>
<html ng-app="test_ajax">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="angular.js" charset="utf-8"></script>
    <script>
    let mod=angular.module('test_ajax', []);
    mod.controller('main', function ($scope, $http){
      $http.get('arr.txt').then((res)=>{
        $scope.arr=res.data;
      }, (err)=>{
        alert('错了');
      });
    });
    </script>
  </head>
  <body ng-controller="main">
    <ul>
      <li ng-repeat="a in arr">{{a}}</li>
    </ul>
  </body>
</html>

推荐阅读