Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS access$scope变量在then回调之外_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript AngularJS access$scope变量在then回调之外

Javascript AngularJS access$scope变量在then回调之外,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我从我的引导模式提交按钮调用一个方法,如下所示 $scope.addProject = function() { $http.post('/cc-addProject' , $scope.project).then(function successCallback(response) { $('#myModal').modal('toggle'); $scope.dataList = response.data; }, function er

我从我的引导模式提交按钮调用一个方法,如下所示

$scope.addProject = function() {
    $http.post('/cc-addProject' , $scope.project).then(function successCallback(response) {
        $('#myModal').modal('toggle'); 
        $scope.dataList = response.data;
      }, function errorCallback(response) {     
      });
    console.log("$scope.dataList : " + $scope.dataList); // I cannot access the same response.data here
};
这也是我在视图中调用addProject()的方式

<button type="button" class="btn btn-info pull-right"  style="margin-left:10px;" ng-click="addProject()" ng-if="selectedID == -1">Sumbit</button>
Sumbit
我想访问“response.data”,在回调函数内部为$scope.dataList设置,然后在回调函数外部为$scope.dataList设置 目前,它没有使用上述代码实时更新网格

我该怎么做

***********相关电网代码*********

<tbody>                             
    <tr role="row" class="odd" ng-repeat="project in dataList">
        <td>{{project.projectName}}</td>
    </tr>
</tbody>

{{project.projectName}

您不能直接记录
$scope.dataList
的更新值,因为
$http.post
是一个
异步函数
,但是您确实希望从外部访问它,您需要从
$http.post
的成功回调调用函数

$scope.addProject = function() {
    $http.post('/cc-addProject' , $scope.project).then(function successCallback(response) {
        $('#myModal').modal('toggle'); 
        $scope.dataList = response.data;
        useUpdatedValue();
      }, function errorCallback(response) {     
    });

    function useUpdatedValue() {
      console.log("$scope.dataList : " + $scope.dataList); // I cannot access the same response.data here
    }
};

您可以在回调之外设置dataList的观察程序。当response.data返回时,数据列表将更新。然后观察者回调中的代码将运行。

尝试在成功回调中打印
$scope.dataList
。如果您当前使用
console.log(“$scope.dataList:+$scope.dataList”)在外部访问您的
$scope.dataList
,它应该可以工作,问题是什么?也许问题在于您使用jQuery库?为什么不使用bootstrap ui?我可以在回调内部访问$scope.dataList,但我需要在回调外部访问/设置
$http.post
是异步的,这意味着回调(然后
函数中的任何代码)将在请求完成后的某个时间调用。在调用
回调之前执行行
控制台.log
,然后调用
回调,因此在尝试访问
$scope.dataList
时,尚未设置其中的值。没有办法,你需要仔细阅读关于承诺和异步代码的工作。我投票将这个问题作为离题题结束,因为问题在其他地方,但无法解决,只要用户没有提供足够的问题信息,也没有回答用户的问题。我不知道你为什么投票否决我的答案,因为这是从async函数访问更新值的方法,所以我认为您不了解async,所以请先仔细准备,然后再做其他事情。这段代码根本没有意义。它只是创建了一个不需要的函数,用作回调函数。这也可以放在$http的解析部分中。他仍然无法处理$http成功部分“外部”的回调。@testndtv如果
dataList
未在模板中更新,则说明存在范围问题。模态创建作用域。也许
数据列表
进入了错误的范围。让我问你……我在html模板中使用“数据列表”的方式……如果数据列表发生更改,为什么它不会自动刷新?@testndtv如果
数据列表
没有在模板中更新,你就有范围问题。模态创建作用域。也许
dataList
进入了错误的范围。@brickup最好从承诺中链接数据。观察者执行每个摘要周期并减慢框架的速度。如果模板没有自动更新,这可能是一个范围问题,就像georgeawg所说的@是的,你是对的。观察者会减慢应用程序的速度,但一两个观察者不会有任何伤害:)事实上,如果dataList是用双向绑定的模板绑定的,angular已经为它创建了一个观察者。因此,创建另一个观察者是没有必要的。