Javascript 避免运行Angular Controller两次/Ajax调用

Javascript 避免运行Angular Controller两次/Ajax调用,javascript,angularjs,Javascript,Angularjs,我尝试在控制器内调用函数,但它运行了两次,正如您可能知道的那样,这是不可行的,特别是如果您希望将记录插入数据库,因为数据会重复自身 这是我使用的代码 我使用的模块、工厂和控制器包含在AdminController.js中: HTML是: <div ng-controller="modHCSectionCtrl" id="modHCSection"> <div class="panel panel-default" id="editHCSection" > <div

我尝试在控制器内调用函数,但它运行了两次,正如您可能知道的那样,这是不可行的,特别是如果您希望将记录插入数据库,因为数据会重复自身

这是我使用的代码

我使用的模块、工厂和控制器包含在AdminController.js中:

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来延迟应答,并在异步调用结束后执行代码


所以,我坚持,也许是一个新手问题,但我真的很感谢你在这件事上能给我的任何帮助。

$http.put$url,{data:datos}你不应该连锁然后函数,它已经向控制器返回了使用的承诺

所以,你建议使用吗。在$http.put$url之后立即成功,{data:datos}。然后呢?。我也试过了,但它仍然执行了两次。你能给我一个实施的例子吗?谢谢您的回答。好的,提交表单有两种方式:在表单中使用ng提交和输入类型提交;另一方面,使用ng单击按钮。我尝试了这两种方法,奇怪的是,当使用ng click方法时,它工作正常,只向控制器发送一次调用,但如果使用ng submit方法,它会向控制器发送两个请求。这有什么意义吗?没有完整的代码,很难判断发生了什么。例如,$window.location.href=../../hc\u节;这会再次呼叫同一个控制器吗?好的,谢谢你的支持。事实上,.././hc_sections是一个Restful调用,它将页面重定向到包含节列表的页面。现在我使用的是ng click方法,而不是ng submit方法。只是不明白为什么使用ng提交代码会运行两次。ng click调用的控制器和函数与ng submit使用的控制器和函数不同,因此我认为错误必须与ng submit事件相关或与UI的交互相关。依我拙见
<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>