AngularJS - ng-init不使用$ resource和ng-repeat

时间:2016-01-18 15:10:44

标签: javascript html angularjs

大家下午好,因为我找不到解决问题的办法, 我在这里= X这里是交易:我试图使用ng-init调用函数来初始化ng模型,但在此函数中使用自定义$ resource方法。现在出现了问题,ng-init不等待承诺被解析以将值分配给模型,它正好通过它,因为未解决的承诺是未定义的。以下是代码:

带输入和ng-repeat的Html:

<tr ng-form="itemsForm" ng-repeat="item in items">
                <td>
                  <div class="has-feedback"
                    ng-class="{
                        'has-error': itemsForm.product.$invalid && itemsForm.product.$dirty,
                      'has-success': itemsForm.product.$valid   && itemsForm.product.$touched
                    }">
                    <input type="text" typeahead-editable="false" typeahead-min-length="3" typeahead-no-results="noResultsProduct" required name="product" placeholder="Digite o codigo ou Descrição" class="form-control input-sm" id="product" typeahead-on-select="item.prod_code = product.codigo; updateFields(product)" ng-model="product" ng-init="product=item.prod_code; product=find_product(item.prod_code)" uib-typeahead="product as (product.descricao + ' - ' + product.codigo) for product in getProducts($viewValue) | orderBy:'descricao' | limitTo:15"/>
                    <p class="help-block" ng-messages="itemsForm.product.$error">
                      <span ng-message="required">Produto não informado.</span>
                      <span ng-if="noResultsProduct">Nenhum Produto encontrada.</span>
                    </p>
                  </div>
                </td>

ng-init调用的函数:

$scope.find_product = function(product) {
  if (product != null){
    console.log("Started");
    ProductService.find_by($scope.company_id,product).$promise.then(function(data) {
      console.log(data.products);
      return data.products;
    });
    console.log("Finished");
  }
}

服务功能:

angular.module(&#34;应用&#34;)。服务(&#39; ProductService&#39;,[&#39; $ resource&#39;,&#39; $ http&#39;,功能($资源,$ HTTP){

this.products = function(company_id, search_filter){
  var services_product = $resource('/services_product/all',
                           {},
                           { "all": { "method": "POST" }});
  return services_product.all({"company_id": company_id, "search_filter": search_filter});
};

this.find_by = function(company_id, search_filter){
  var services_product = $resource('/services_product/find_by',
                           {},
                           { "find_by": { "method": "POST" }});
  return services_product.find_by({"company_id": company_id, "search_filter": search_filter});
};

} ]);

在控制台中打印的是什么:

Started
document_nfe_reception_controller.js?body=1:125 Finished
document_nfe_reception_controller.js?body=1:120 Started
document_nfe_reception_controller.js?body=1:125 Finished
document_nfe_reception_controller.js?body=1:120 Started
document_nfe_reception_controller.js?body=1:125 Finished
document_nfe_reception_controller.js?body=1:120 Started
document_nfe_reception_controller.js?body=1:125 Finished
document_nfe_reception_controller.js?body=1:120 Started
document_nfe_reception_controller.js?body=1:125 Finished
document_nfe_reception_controller.js?body=1:122 Object {filial: "01  ", codigo: "1000028        ", descricao: "57 - PRENSA CABO STECK BSP- 1/2 - COD.                                          ", tipo: "MP", unidade: "PC"…}
document_nfe_reception_controller.js?body=1:122 Object {filial: "01  ", codigo: "1000028        ", descricao: "57 - PRENSA CABO STECK BSP- 1/2 - COD.                                          ", tipo: "MP", unidade: "PC"…}
document_nfe_reception_controller.js?body=1:122 Object {filial: "01  ", codigo: "1000022        ", descricao: "61 - VIGA PINUS 2 POL X 1 POL - 4M                                              ", tipo: "EM", unidade: "PC"…}
document_nfe_reception_controller.js?body=1:122 Object {filial: "01  ", codigo: "10000105       ", descricao: "61 - TABUA PINUS 3 POL X 20MM - 4000MM                                          ", tipo: "EM", unidade: "PC"…}
document_nfe_reception_controller.js?body=1:122 Object {filial: "01  ", codigo: "1000033        ", descricao: "CABO CONTROLE VEIAS NUMER.CL5 6X1,5 MM  1 KV                                    ", tipo: "MP", unidade: "MT"…}

我正在处理5个项目,正如您所看到的,他只是在执行完所有内容后获取数据。感谢任何帮助=))

1 个答案:

答案 0 :(得分:0)

您应该将data.products分配给item.product,而不是在promise回调中返回“data.products”。

$scope.find_product = function(item) {
    if (product != null){
        console.log("Started");
        ProductService.find_by($scope.company_id,item.prod_id).$promise.then(function(data) {
            console.log(data.products);
            item.product = data.products;
        });
        console.log("Finished");
    }
}

HTML

<input type="text" typeahead-editable="false" typeahead-min-length="3" typeahead-no-results="noResultsProduct" required name="product" placeholder="Digite o codigo ou Descrição" class="form-control input-sm" id="product" typeahead-on-select="item.prod_code = product.codigo; updateFields(product)" ng-model="item.product" ng-init="find_product(item)" uib-typeahead="product as (product.descricao + ' - ' + product.codigo) for product in getProducts($viewValue) | orderBy:'descricao' | limitTo:15"/>