Angularjs http调用并将接收到的数据保存到控制器实例

时间:2014-12-18 03:19:10

标签: angularjs

app.controller('sampleCtrl', function($scope, $http, nonService){
    this.someVar = 'Hello World';

    $http.post('funcsPHP/2.0/getConditionProductService.php', 
        { 'product' : angular.toJson(this.productObj) }).
        success(function(data, status, headers, config) {
            $scope.saveData = data; // works fine
            this.saveData = data // 'this' doesnt refer to the controller 'sampleCtrl' anymore, but to the $http instance, right ?
        }).
        error(function(data, status, headers, config) {
            console.log("ERROR");
            // log error
    });
});

我知道我能够将数据保存到$ scope,但我想知道如何将数据保存到控制器变量,例如'this.someVar'。我是否必须将我的控制器实例注入$ http?

干杯!

2 个答案:

答案 0 :(得分:2)

有几种方法。

最简单的方法是只指定一个变量来指向控制器中的this值。最常见的名称是_thisselfthat

所以你得到:

app.controller('sampleCtrl', function($scope, $http, nonService){
    this.someVar = 'Hello World';
    var self = this;

    $http.post('funcsPHP/2.0/getConditionProductService.php', 
        { 'product' : angular.toJson(this.productObj) }).
        success(function(data, status, headers, config) {
            $scope.saveData = data;
            self.saveData = data;
        })
        .error(function(data, status, headers, config) {
            console.log("ERROR");
            // log error
        });
});

另一种方法是使用Function#bind()成功处理程序在其中正确设置this

那会给你:

app.controller('sampleCtrl', function($scope, $http, nonService){
    this.someVar = 'Hello World';

    $http.post('funcsPHP/2.0/getConditionProductService.php', 
        { 'product' : angular.toJson(this.productObj) }).
        success((function(data, status, headers, config) {
            $scope.saveData = data;
            this.saveData = data;
        }).bind(this))
        .error(function(data, status, headers, config) {
            console.log("ERROR");
            // log error
        });
});

答案 1 :(得分:-1)

使用“Controller As”访问控制器实例变量的方式:

 <div ng-controller="sampleCtrl as ctrl">
      {{ctrl.someVar}}
 </div>