Javascript 如何防止ng模型重写由指令生成的输入文本的值
我有一个指令来设置表单的一些值Javascript 如何防止ng模型重写由指令生成的输入文本的值,javascript,angularjs,Javascript,Angularjs,我有一个指令来设置表单的一些值 lightconsole.directive("injectSession", function () { return function (scope, element, attrs) { var paramInput = angular.element(element).find("input") if (paramInput) { var paramName = scope.param.name
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 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> );
{{param.type}
{{param.name}
);
在这种情况下,如果其中一个元素命名为session,则一切正常,值form hidden input被设置为输入值,但是当我将
ng model
添加到input
元素时,值会被擦除。很抱歉将此作为答案写入,但它太长,无法作为注释。
这可能不是我能给出的最好的解释,但基本上你是把jquery/javascript和angular混合在一起。当你在一些输入中定义一个ng模型时,scope
将监视你给他的ng模型到scope.model
的每一个变化,因此要修改代码中的值,你必须改变scope.model
试图用javascript改变它不会更新scope.model
所以不会“触发”scope.watch
如果希望通过javascript将更改应用于角度范围,可以看到这一点
但我认为,既然您使用的是angular,我建议您使用angular解决所有可能的问题,而不是混用。删除paramInput并使用类似于scope.myModel=sessHolder.val()的作用域,在输入时只需添加ng model=“myModel”
谢谢@JoseRocha,效果很好。但你能解释一下为什么在输入元素上设置值不起作用吗?