加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 为什么我要为一个项目多次调用?

发布时间:2020-12-17 07:13:53 所属栏目:安全 来源:网络整理
导读:我正在尝试调用服务器以根据在下拉列表中选择的特定ID获取项目列表. HTML: tr ng-repeat="parent in model.waivers" tdselect ng-model="parent.ID" ng-options="object.Key as object.Value for object in model.myObject"/select/td tdselect ng-model="p
我正在尝试调用服务器以根据在下拉列表中选择的特定ID获取项目列表.

HTML:

<tr ng-repeat="parent in model.waivers">
    <td><select ng-model="parent.ID" ng-options="object.Key as object.Value for object in model.myObject"></select></td>
    <td><select ng-model="parent.ServiceNameID" ng-options="expectedResult.Key as expectedResult.Value for expectedResult in model.output(object.ID)"></select></td>
</tr>

控制器:

$scope.model.output = function(id) {
        console.log(id);
    }

模型:

var Model = function() {
    this.parent = [];
};

我只是在这里登录以查看结果.我真正打算做的是根据该ID获取一个列表.

如果有3个表行,那么输出的是:

1
1
1
2
2
3
3
1
2
3
1

代替:

1
2
3

这是我所期望的,因为每行只有一个id.

有关导致此行为的原因有何建议?

更新

所以@Fieldset告诉我,问题是由父方法中每个项目的角度调用方法引起的.

有关如何执行此操作的任何建议,每个项目只调用一次方法吗?

解决方法

你的代码在ng-repeat中,所以model.output(object.ID)将被调用多次,因为model.waivers中有元素.

您无法像这样向服务器发出请求,因为您的HTTP请求将是异步的并返回一个承诺,您不能在视图中使用承诺.您必须在控制器($scope)中加载数据,然后您的视图才能通过$scope访问您的数据

您必须先申请数据:

调节器

function($scope,$http) {

  $scope.data = [];

  //This is asynchronous
  $http.get('my/path/to/my.data').success(function(data) {
    $scope.data = data;
  });

}

编辑:

angular.module('myApp',[]).controller('myCtrl',function($scope,$http,$q) {

  //One request per id
  var ids = [4,52,65,12,78];
  var promises = [];

  ids.forEach(function(id) {
    promises.push($http.get('my/path/to/my.data?id='+id));
  });



  //Fill $scope.data when all requests are done
  $scope.data = [];

  $q.all(promises).then(function(data){

    $scope.data = data;

    /**
     * You get something wich looks like
     * 
     * Assuming that your webservice returns a response like {id: 4,name: 'Something'}
     * 
     * $scope.data = [
     *  {id: 4,name: 'Something'},*  {id: 52,name: 'Something else'},*  {id: 65,name: 'foo'},*  {id: 12,name: 'bar'},*  {id: 78,name: 'foobar'}
     * ];
     * 
     * So you can loop over $scope.data in your view
     * 
     */

  });

});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读