-1

我的应用程序中有一个 mdDialog ,它调用一个 API 来响应一些数据。我需要在主控制器中可以访问此数据响应,以便可以在另一个调用中使用它。

CRUD 操作

 $scope.add_id = [];
    $scope.createAddress = function() {
        $http.get('api.php?action=create-address', {
            params: {
                add1: $scope.newadd.add1,
                add2: $scope.newadd.address2,
                city: $scope.newadd.city,
                state: $scope.newadd.state,
                zip: $scope.newadd.zip
            }
        })
        .success(function(response) {
            $scope.add_id = response.data[0].address_id;
        });
    };

mdDialog

$scope.addParcel = function(ev) {
    $mdDialog.show({
        controller: DialogController,
        templateUrl: 'libs/html/addparcel.html',
        parent: angular.element(document.body),
        targetEvent: ev,
        clickOutsideToClose:true,           
        scope: $scope,
        preserveScope: true            
    });
};

因此,在 addParcel mdDialog 内部,我有一个执行 addAddress 函数的按钮,它转为成功,我可以访问对话框中的数据。但是,即使对话框设置为保留范围,在我关闭对话框后,address_id 根本不会出现在主控制器中。我应该使用当地人吗?如何让数据在主控制器中可访问?请尽可能提供信息,因为我还是 AngularJS 的新手。谢谢。

4

1 回答 1

0

这是因为 mdDialog 创建了一个继承自页面控制器的 $scope 的新子范围。

你可以做几件事,

  1. 在您的页面控制器中创建一个对象,称为“addressDetails”,并在您的 addAddress 函数中访问它

    // 页面控制器 $scope.addressDetails = {};

    // addAddress $http.get(...).then(function (response) { $scope.addressDetails.add_id = response.data[0].address_id; });

  2. 使用 $scope.$parent (不推荐)

你可以阅读这个关于范围继承的 wiki(这是一篇很棒的文章)

https://github.com/angular/angular.js/wiki/Understanding-Scopes

于 2017-04-17T15:52:13.627 回答