在AngularJS中无法两次调用某个函数

时间:2013-08-02 10:34:45

标签: function http angularjs xmlhttprequest httprequest

我有一些Ang代码,我似乎无法调试。加载页面在导航下拉栏中完美呈现我的所有组。当我单击其中一个组时,将调用messagesIndex函数,并且该组中的所有消息都将正常显示,此时一切正常。问题是当我去点击另一个组,甚至是同一个组时,messagesIndex函数不会再次加载。

我花了很多时间尝试调试此问题无济于事,但我已经缩小了问题发生的确切位置,似乎没有任何问题我可以找到。

我用$ scope.groupID替换了messagesIndex函数的内容,并输出结果和随机数。 groupID与随机数一起显示,每次点击不同的组时,会出现不同的ID和随机数,这意味着JADE / HTML功能正常,功能标题是金色的。

然后我接受了原始的messagesIndex函数,并在HTTP请求之前和之后将$ scope.random1和scope.random2与分配给它们的随机数添加到函数的开头和结尾。当我第一次调用该函数时,生成并输出了随机数,虽然http请求是异步的,所有值都正常返回,暗示该函数完全调用,除非在成功后拖动HTTP请求的问题响应?然后当我通过点击另一组再去打电话时。这两个随机数都没有改变,表明函数根本没有调用,或者在执行第一行代码之前停止了。

坦率地说,我很难过。代码看起来基本上与许多有效的HTTP请求完全相同,但由于某种原因,我无法调用它两次。

以下是AngularJS代码:

angular.module('angular-client').controller('GroupMeCtrl',
['$scope', '$http', '$templateCache', 'Auth', function($scope, $http, $templateCache) {

  $scope.groupsIndex = function(){
      $http({
        method: 'GET', 
        url: 'https://api.groupme.com/v3/groups?token=' + token,
        cache: $templateCache
      }).
          success(function(data, status) {
              $scope.groupsIndex = data.response;
              $scope.stat = status;       
          }).
          error(function(data, status, headers, config) {
              $scope.groupsIndex = data.response;
              $scope.stat = status || "Request failed"; 
          });
  };

  $scope.messagesIndex = function($groupID){
      $http({
        method: 'GET', 
        url: 'https://api.groupme.com/v3/groups/' + $groupID + '/messages?token=' + token,
        cache: $templateCache
      }).
          success(function(data, status) {
              $scope.messagesIndex = data;
              $scope.stat = status;       
          }).
          error(function(data, status) {
              $scope.messagesIndex = data.response;
              $scope.stat = status || "Request failed";
          });
  };

}]);

下面是我的JADE:

li.dropdown
    a.dropdown-toggle(href='#', data-toggle='dropdown')
        | Groups
        b.caret
    ul.dropdown-menu
        li(ng-repeat="group in groupsIndex")
            a(ng-click="messagesIndex(group.id)") {{group.name}}



.message-box(ng-repeat="message in messagesIndex.response.messages")
    .avatar-container
        img(src="{{message.avatar_url}}").avatar
    .text
        .user-name
            {{message.name}}
        span
            {{message.text}}

1 个答案:

答案 0 :(得分:0)

您正在使用返回的数据覆盖该函数:

$scope.messagesIndex = function($groupID){
...
$scope.messagesIndex = data;
...
$scope.messagesIndex = data.response;

$scope.messagesIndex不能等同于您收到的功能和数据。