2015-09-14 91 views
2

我是新来的角,我一直在玩,试图了解它是如何工作的。我正在做一个简单的应用程序,其中有人可以通过简单的html界面添加用户,并使用SQLite将其存储在数据库中,然后他们可以编辑或删除它们。

所以我试图scope.apply()了解本手册使用$所以我也为创建这样一个场景,我将需要使用它的以下内容:

上的功能,我存储一些变量在localStorage的,然后我手动打开HTML:

localStorage.setItem('idUsuario',response.records[0].idUsuario); 
    localStorage.setItem('dato_Nombre',response.records[0].nombre); 
    localStorage.setItem('dato_ApPat',response.records[0].apPat); 
    localStorage.setItem('dato_ApMat',response.records[0].apMat); 
    localStorage.setItem('dato_Direccion',response.records[0].direccion); 
    localStorage.setItem('dato_Tel',response.records[0].telefono); 
    localStorage.setItem('dato_email',response.records[0].correo); 
    //debugger; 
    location.href = "editClient.html";} 

在我打开HTML,我宣布我CONTROLER接收存储的数据,并为其分配到NG-模型变量我里面声明NG-的init()对一些文本输入:

$scope.init = function() { 
    $scope.idUsuario=localStorage.getItem("idUsuario"); 
    $scope.dato_Nombre=localStorage.getItem("dato_Nombre"); 
    $scope.dato_ApPat=localStorage.getItem("dato_ApPat"); 
    $scope.dato_ApMat=localStorage.getItem("dato_ApMat"); 
    $scope.dato_Tel=localStorage.getItem("dato_Tel"); 
    $scope.dato_Direccion=localStorage.getItem("dato_Direccion"); 
    $scope.dato_email=localStorage.getItem("dato_email"); 

    localStorage.clear(); 
} 



<div class="list"> 
      <label class="item item-input item-stacked-label"> 
       <span class="input-label" >Nombre</span> 
       <input type="text" placeholder="Escriba su nombre" ng-model="dato_Nombre" > 
      </label> 
      <label class="item item-input item-stacked-label"> 
        <span class="input-label">Apellido Paterno</span> 
       <input type="text" placeholder="Escriba su apellido paterno" ng-model="dato_ApPat"> 
      </label> 
      <label class="item item-input item-stacked-label"> 
        <span class="input-label">Apellido Materno</span> 
       <input type="text" placeholder="Escriba su apellido materno" ng-model="dato_ApMat"> 
      </label> 
      <label class="item item-input item-stacked-label"> 
        <span class="input-label">Dirección</span> 
       <input type="text" placeholder="Escriba su dirección" ng-model="dato_Direccion"> 
      </label> 
      <label class="item item-input item-stacked-label"> 
      <span class="input-label">Teléfono</span> 
      <input type="text" placeholder="Escriba su teléfono" ng-model="dato_Tel"> 
      </label> 
      <label class="item item-input item-stacked-label"> 
        <span class="input-label">Email</span> 
       <input type="text" placeholder="Escriba su correo" ng-model="dato_email"> 
      </label> 
     <center> 
      <button class="button button-possitive" ng-click="editarCliente()">Actualizar</button> 
     </center>  
     </div> 
当表单加载输入实际上是充满了我从localStorage的带来的数据

所以,后来我修改文本键入别的东西和调用,它返回每个NG-模型哪像预期的,具有数据功能没有更新到我在输入中输入的内容,仍然有从localStorage分配的数据,因此需要使用$ scope.apply()。

我的问题是,无论我在哪里尝试使用它,我总是会收到一个错误,表示应用程序已在运行,我无法弄清楚如何使用它来更新我的文本输入内容。

回答

2

$范围。$应用火灾的角度消化周期,但因为你的变化是一个角度应用程序内部发生的事情,有一个周期已经运行和处理你的数据,这就是为什么你得到这个错误,因为你不应该2个摘要循环同时执行。 $ scope。当角度环境发生一些变化时,$ apply是有用的。例如,当你需要集成不友好的角度组件,如jquery插件或其他UI元素来处理它们的角色世界的事件。如果您想更新任何这些元素事件中的角度应用程序,您需要使用$ scope。$ apply,如果您选择使用setTimeout或setInterval而不是提供给角度的$ timeout或$ interval服务,也会发生这种情况,因为函数的执行会发生在角度摘要循环之外。

$.ajax({ 
url:'http://lslsls.com', 
method: 'get' 
}) 
.success(function(data){ 
    var scope = angular.element($('#elementId')).scope(); 
    scope.returnedData=data; 
    scope.$apply(); 
}); 
$

不重视对jQuery的一部分,但请注意,在成功的功能范围检索和更新的,如果我不使用范围。适用()那里,值止跌” t直到发生一些其他变化,并且强制消化循环,可以表示范围