【问题标题】:How to pass $http response value to another function?如何将 $http 响应值传递给另一个函数?
【发布时间】:2016-03-22 18:49:50
【问题描述】:

我有这两个功能。我需要将 $scope.submit 的响应值传递给 $scope.addTeams。这是有效的,但我知道这是一种非常愚蠢的方法。最好的方法是什么?

	$scope.submit = function() {
	  $http.post('/api/createclub/', {
	    club: $scope.club
	  }).success(function(response) {
	    console.log(response);
	    $rootScope.clubId = response._id;
	  });
	};

	$scope.addTeams = function() {

	  console.log($rootScope.clubId);

	  $state.go('createTeam', {
	    clubId: $rootScope.clubId
	  });
	  $scope.cancel();
	};

【问题讨论】:

  • 你正在做的事情会起作用,但是,addTeams 不会有 clubId,除非在帖子完成后才调用它。这是一个竞争条件,考虑到提供的一小部分代码,我看不到一个简单的方法。
  • 是的,我明白了。为了让您更深入地了解我想要实现的目标,我有两个不同的按钮来触发这些功能。
  • 禁用一个直到另一个完成,或者将它们变成一个按钮。

标签: javascript angularjs http asynchronous angular-promise


【解决方案1】:

怎么了

$scope.submit = function() {
      $http.post('/api/createclub/', {
        club: $scope.club
      }).success(function(response) {
        console.log(response);
        $scope.addTeams(response._id);
      });
    };

    $scope.addTeams = function(id) {

      $state.go('createTeam', {
        clubId: id
      });
      $scope.cancel();
    };

【讨论】:

  • 这并没有错。我也试过这个,但 $scope.addTeams() 是由 ng-click 触发的。但是,通过遵循这种方法, $scope.addTeams() 函数会被调用并且状态会发生变化,这不应该
  • 我不确定我是否遵循。您在单击按钮时使用提交和添加团队?
  • 听起来像是在两个不同的按钮上?!
  • 是什么触发了submit
  • 是的。基本上这个功能,即 Addteams 应该只在点击按钮时触发。
【解决方案2】:

只需在您的 $http 后响应处理程序中调用您的 addTeams 函数,并传入您当前在 rootScope 上设置的 id 值

你真的不应该在 rootScope 上设置这样的属性

【讨论】:

  • 我曾尝试过这种方法,但 $scope.addTeams() 是由 ng-click 触发的。但是,按照这种方法,$scope.addTeams() 函数会被调用并且状态会发生变化,这基本上不应该。
猜你喜欢
  • 2021-05-12
  • 1970-01-01
  • 2016-11-24
  • 2018-09-18
  • 2021-01-12
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多