如何防止ng模型覆盖指令生成的输入文本的值
How to prevent ng-model to override value of input text generated by directive
我有指令设置形式的一些值
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());
});
}
}
}
});
然后我用ng-repeat
:创建了一个form
<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
元素时,值就会被擦除。
很抱歉把它写成答案,但它太长了,不能作为注释。这可能不是我能给出的最好的解释,但基本上你把jquery/javascript和angular混合在一起了。当您在某些输入中定义ng-model
时,scope
将监视该ng-model
对您给他的scope.model
的每一次更改,因此要修改代码中的值,您必须更改scope.model
。尝试用javascript更改它不会更新scope.model
,因此不会"触发"scope.watch。
如果您想通过javascript将更改应用于角度范围,您可以看到这个stackerflow问题。
但我既然你在使用angular,我建议你用angular解决所有可能的问题,而不是混合。
相关文章:
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 使用模拟按键在输入框中自动输入文本
- 如何添加类,同时开始在文本字段中输入文本
- JQuery使用相同的功能自动完成各种输入文本
- 如何设置输入文本框jquery的值
- 输入文本框为空时的阻止按钮asp.网络表单
- 基于单选框更新页眉,选中并选择输入文本
- 将输入文本与某个选项的值相匹配并自动选择
- 如何在 JavaScript 中创建输入文本框
- 如何使用纯Javascript观看输入文本框
- 需要使用javascript获取输入文本,然后将其添加到句子中
- php&js-将电子邮件添加到输入文本中
- 动态启用/禁用来自控制器的输入文本
- .val()不返回输入文本
- 从确认框中预填充输入文本框
- 如何使用JavaScript解析输入文本中给定的数据
- 添加/删除/更改输入文本的部分值
- 根据输入文本按元素排序,AngularJS
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 如何从Tr重复的输入文本中获取值