2015-12-10 70 views
0

產生我有指令設置表格的一些值如何防止NG-模型覆蓋由指令

lightconsole.directive("injectSession", function() { 
    return function (scope, element, attrs) { 
     var paramInput = angular.element(element).find("input") 
     if (paramInput) { 
      var paramName = scope.param.name.toLowerCase(); 
      var sessHolder = angular.element("#user_session"); 
      if (paramName === "session" || paramName == "sessionid") { 
       paramInput.val(sessHolder.val()); 
       sessHolder.bind("change", function (session) { 
        paramInput.val(sessHolder.val()); 
       }); 
      } 
     } 
    } 
}); 

然後我創建了一個formng-repeat輸入文本的價值:

<form ng-submit="callFun()"> 
    <table class="materail_input_block"> 
     <thead> 
     </thead> 
     <tr ng-repeat="param in fun.operationArguments" inject-session> 
      <td>{{param.type}}</td> 
      <td>{{param.name}}</td> 
      <td><input name="{{param.name}}" 
         class="form-control materail_input" type="text" 
         placeholder="enter value"/></td> 
     </tr> 

    </table> 
    <input type="submit" value="Call"/> 
</form>); 

在這種情況下,如果其中一個元素被命名爲session,則一切正常,值表單隱藏輸入被設置爲輸入值,但是當我將ng-model添加到input元素時,值將被刪除。

+0

刪除paramInput並使用範圍,如'scope.myModel = sessHolder.val()',並在輸入上添加'ng-model =「myModel」' –

+0

謝謝@JoseRocha,這很好。但是,你能解釋爲什麼設置輸入元素的值不起作用嗎? –

回答

2

對不起,這是一個答案,但作爲評論太長了。 這可能不是我能給出的最好的解釋,但基本上你是混合jquery/javascript的角度。當你在某些輸入中定義ng-model時,scope將會看到你給出的ng-modelscope.model的所有更改,以便修改代碼中的值,您必須更改scope.model嘗試使用javascript更改它,因此不會更新scope.model。將不會「觸發」scope.watch。

如果您想通過javascript將角度範圍應用於角度範圍,您可以看到此stackoverflow question

但我因爲你使用角我會建議解決每一個可能的事情與角度,而不是混合。