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,效果很好。但你能解释一下为什么在输入元素上设置值不起作用吗?