gpt4 book ai didi

javascript - jQuery ajax 调用后 Angular Controller 作用域不更新

转载 作者:可可西里 更新时间:2023-11-01 01:58:48 25 4
gpt4 key购买 nike

我有这段代码,但我看不出问题的根源在哪里,我在 chrome 控制台中没有收到任何错误我的 Controller :

function notifController($scope) {
$scope.refreshMsgs = function () {
$.post("notification-center-trait.aspx")
.success(function (data) {
$("#loadedthings").html(data);
newMsgs = JSON.parse($("#label1").html());
$scope.msgs = newMsgs;
});
}
$scope.refreshMsgs();
}

label1label2在 div loadedthings 中正确加载;

控制台中的 newMsgs 已按照应有的方式进行解析;

我让它在其他页面上工作,但似乎我在这个页面上遗漏了一些东西。我有 <html ng-app>标签:

<div ng-controller="notifController"> 
<div class="row">
{{msgs.length}} new msgs :
<table class="table">
<tbody >
<tr ng-repeat="msg in msgs">
<td>
{{msg.sender}}
</td>
<td>
{{msg.message}}
</td>
<td>
{{msg.date}}
</td>
</tr>
</tbody>
</table>
</div>
</div>

当我执行此命令时,我在控制台中得到“未定义”:angular.element($0).scope()

最佳答案

忽略我在评论中指出的其他架构问题,真正的问题是您使用的是 jQueryajax 而不是 Angular 的 $http。当你不通过 Angular 做那样的事情时,你就在 Angular 的范围之外工作,它不知道变化。虽然不理想,但您可以使用 $scope.$apply 来让 Angular 知道在其知识范围之外更新了某些内容。看起来像这样:

$scope.$apply(function() {
$scope.msgs = newMsgs;
});

这就是告诉 Angular 你已经从它不知道的上下文中修改了它需要知道的东西(在这种情况下是 jQuery ajax 调用)。

$scope.$apply() 有一些有效的用途,例如在事件处理程序中,但大多数时候它是不良做法的标志。您绝对应该使用 Angular 的 $http 进行 ajax 调用。

关于javascript - jQuery ajax 调用后 Angular Controller 作用域不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21127709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com