【问题标题】:Why $http in ng-init is not getting called everytime the view is loaded - AngularJS为什么每次加载视图时都不会调用 ng-init 中的 $http - AngularJS
【发布时间】:2015-12-21 15:47:52
【问题描述】:

我已根据我的观察修改了我的问题。$http 每当视图被调用第二次或第三次左右时,服务器端的请求都不会发生,尽管initWishList (ng-init ) 被调用。场景如下:

我在导航栏中有一个我的帐户标签,它会打开一个视图,其中包含我的愿望清单、我的地址等选项。当第一次点击我的愿望清单时时间,$http 请求发生,但是当我再次点击 My Account 时(这次我在加载 .html 视图时在服务器端看不到任何调用),然后如果我点击My Wishlist ,控制器被调用但 $http 未被调用(这次我再次没有看到来自$http 的服务器端的任何调用)但我可以看到警报 Init Called

为什么会这样?

$scope.initWishList = function(){
    alert('Init called')
    $http.get("/get_wish_list/")
    .success(function (response) {
        $scope.refreshWishList(JSON.parse(response["products_json"]));
    })
    .error(function(){
        console.log('Error');
    });
};

希望我已经正确解释了这个场景。

【问题讨论】:

  • ng-init 不应使用。为什么你不在作用域控制器中初始化一个变量并在之后更新它?
  • @AlainIb 嗯,但是为什么再次点击视图时它没有被调用?
  • 你能展示你的场景的 HTML 吗? ng-init 每次它所附加的元素被 Angular 渲染和编译时都会被执行,因此无论模板是从服务器还是从缓存中检索。
  • @tasseKATT:我已经更新了我的问题。现在看看
  • 打开 Chrome DevTools 的网络标签,然后调用initWishList 两次。您应该能够查看是否从缓存中检索了第二个调用。

标签: angularjs angularjs-ng-init ng-controller


【解决方案1】:

当 Angular 解析 ng-controller 指令时,控制器只会初始化一次。由于控制器被初始化一次,ng-init 也会运行一次。

为了您的满意,请在第一行的控制器中添加一个断点,看看您何时到达该断点。每次单击选项卡时,您是否都达到了那个断点?如果没有,则不会每次都调用 ng-init

【讨论】:

  • 我用一些新发现更新了我的问题。请立即查看
猜你喜欢
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
相关资源
最近更新 更多