2015-12-10 32 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

但我因为你使用角我会建议解决每一个可能的事情与角度,而不是混合。