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已经为它创建了一个观察者。因此,创建另一个观察者是没有必要的。