大家下午好,因为我找不到解决问题的办法, 我在这里= 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个项目,正如您所看到的,他只是在执行完所有内容后获取数据。感谢任何帮助=))
答案 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"/>