当前位置: 首页 > 知识库问答 >
问题:

jQuery ajax调用后角度控制器作用域未更新

宣滨海
2023-03-14

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

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按照它应该的方式进行解析;

我让它为其他页面工作,但似乎我错过了这一页上的一些东西。我有

<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。元素($0)。scope()


共有1个答案

马泰
2023-03-14

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

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

这就告诉Angular,您已经从它不知道的上下文(本例中的jQueryAjax调用)修改了它需要知道的内容。

$scope有一些有效的用法$apply(),例如在事件处理程序中,但在大多数其他情况下,这是不良做法的标志。对于ajax调用,您肯定应该使用Angular的$http

 类似资料:
  • 问题内容: 我试图弄清楚控制器继承是如何工作的。我有三个控制器: 和我的看法 但它们都显示“主要”。我该如何解决? 这是一个小提琴http://jsfiddle.net/g3xzh4ov/3/ 问题答案: 这是一个如何在Angular中扩展控制器的示例。 它要求使用,它取代有,它是这样的情况特别好。 注意,它是在幕后使用的,而不是其他Angular服务类型的用法,因此可以将语句从控制器直接带到单独

  • 问题内容: 我有这段代码,我看不出问题的根源在哪里,我在控制器的chrome控制台中没有收到任何错误: 并正确加载到div加载的东西中; 控制台中的newMsgs会按照应有的方式进行解析; 我有它适用于其他页面,但似乎我错过了这个页面上的东西。我有标签: 执行此命令时,我在控制台中得到“未定义”: 问题答案: 忽略我在评论中指出的其他体系结构问题,真正的问题是您使用的是而不是Angular的。当您

  • 具有第三方库回调函数的服务: 还有一个控制器 html页面 m3rdPartLib。on()是一个第三方库回调函数,我正在服务中使用它。我想在它更新时在ui中显示它。在回调时,值会发生更改,但不会反映在ui上。 阅读一些文档并找到$rootScope$可以调用apply,但我在服务中没有$scope/$rootScope的引用。

  • 问题内容: 我需要将变量传递给另一个控制器。我有以下与ListCtrl相关的代码: 链接将转到另一个控制器ItemCtrl。 我想将变量传递给ItemCtrl。我想到了使用一个名为SharedProperties的服务: 单击链接后,我将调用角度单击事件以触发以下功能: 但是,ng-click似乎并没有改变我共享属性的值… 更新 我在ng-click触发的函数中放置了一个警报,并且警报应该被触发。

  • 问题内容: Angular Controller中的方法很少,它们不在scope变量上。 有谁知道,我们如何在Jasmine测试中执行或调用这些方法? 这是主要代码。 现在,在我的茉莉花测试中,我们正在传递“ handleSuccessOfAPI”和“ handleFailureOfAPI”方法,但是这些是未定义的。 这是茉莉花测试代码。 问题答案: 因为您将无法使用这些功能。当您定义一个命名的J

  • 我是新来的Spring应用程序。我试图创建小Spring应用程序,但我得到404错误消息。似乎控制器(indexController)没有开始调用。我累了调试,但它不在那里。 文件位置: /WebContent/WEB-INF/pages/index.html /WebContent/WEB-INF/HelloWebServlet。xml /WebContent/WEB-INF/web.xml H