我尝试在控制器内部调用一个函数,但它会运行两次,因为您可能知道这是不可行的,特别是如果您想将记录插入数据库,因为数据重复"本身" 。
这里有代码I' m
我使用的模块,工厂和控制器就是这个(包含在AdminController.js
中):
var $biocompadmin = angular.module('BioCompAdminApp', ['ngGrid'], function($interpolateProvider) {
// Se ha cambiado la nomenclatura de Angular {{}} para que no choque con la de Blade
// en Laravel. Ahora se empleará <% %>.
$interpolateProvider.startSymbol('<%');
$interpolateProvider.endSymbol('%>');
});
$biocompadmin.factory('modifyHCSection', function($http, $q){
return{
executeCode: function(obj){
//console.log("antes ...");
var deferred = $q.defer();
var datos = [];
item = {};
item['search'] = obj;
datos.push(item);
datos = JSON.stringify(obj);
$url = '../../hc_sections/' + obj.id;
$http.put($url, {data:datos})
.then(function(result) {
//resolve the promise as the data
//console.log(result.data[1]['name']);
console.log("Ejecucion A: " + result.data);
deferred.resolve(result.data);
});
return deferred.promise;
}
};
});
$biocompadmin.controller("modHCSectionCtrl", function($scope,modifyHCSection,$window) {
$scope.formData = {};
$scope.sendForm = function() {
modifyHCSection.executeCode($scope.formData).then(function(data){
console.log(data);
if(data['success']){
alert(data['message']);
$window.location.href ="../../hc_sections";
}else{
alert(data['errors']['fallo']);
}
//$scope.message = data.message;
});
};
});
HTML是:
<div ng-controller="modHCSectionCtrl" id="modHCSection">
<div class="panel panel-default" id="editHCSection" >
<div class="panel-heading" ><h3 class="panel-title">Modificando la Sección Pediatria</h3></div>
<div class="panel-body">
<form id="modHCSectionForm" name="modHCSectionForm" ng-submit="sendForm()"
>
<input type="hidden" ng-model="formData.id" ng-init="formData.id='11'" />
<div class="col-md-12 form-group">
<label class="control-label">Nombre</label>
<input type="text" class="form-control" name="name" id="name" placeholder="" ng-model="formData.name" ng-init="formData.name='Pediatria'"
data-bv-notempty="true"
data-bv-notempty-message="El nombre de la sección es obligatorio y no puede estar vacío"
data-bv-stringlength="true"
data-bv-stringlength-max="100"
data-bv-stringlength-message="La longitud del nombre debe ser menor de 100 caracteres"
/>
</div>
<br>
<div class="col-md-12 form-group">
<label class="control-label">Contacto</label>
<input type="text" class="form-control" name="contact" id="contact" placeholder="" ng-model="formData.contact" ng-init="formData.contact='Manuel Pena'"
data-bv-notempty="true"
data-bv-notempty-message="El nombre del contacto es obligatorio y no puede estar vacío"
data-bv-regexp="true"
data-bv-regexp-regexp="^[a-zA-Z\s]+$"
data-bv-regexp-message="El nombre del contacto solo puede contener caracteres y espacios en blanco sencillos"
/>
</div>
<br>
<div class="col-md-6 form-group">
<label class="control-label">Telefono 1</label>
<input type="text" class="form-control" name="phone1" id="phone1" placeholder="" ng-model="formData.phone1" ng-init="formData.phone1=''"
/>
</div>
<div class="col-md-6 form-group">
<label class="control-label">Telefono 2</label>
<input type="text" class="form-control" name="phone2" id="phone2" placeholder="" ng-model="formData.phone2" ng-init="formData.phone2=''"
/>
</div>
<br>
<div class="row">
<div class="col-md-6 pull-right">
<div class="pull-right">
<button id='modifyHCSection_Cancel' type="button" class="btn btn-danger">Cancelar</button>
<button id='modifyHCSection_Save' type="submit" class="btn btn-primary">Guardar</button>
</div>
</div>
</div>
</form>
</div>
</div>
方法1:不重复控制器调用两次
我试试,我认为HTML中没有双重调用
方法2:从控制器中取出数据功能
正如您所看到的,我创建了一个工厂来将数据与控制器分开,并且我使用$ q.defer来推迟&#34;延迟&#34;异步调用结束后的答案和执行代码。
所以,我坚持认为,也许是一个新手问题,但我非常感谢你能帮助我解决这个问题。
答案 0 :(得分:0)
$ http.put($ url,{data:datos})你不应该链接那个函数,它已经向控制器返回一个使用的承诺