Javascript ng模型内部无线电输入刷新

Javascript ng模型内部无线电输入刷新,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,我正在使用radio/checkbox组件的jQuery库(是的,我知道使用jQuery不适合angular,但这不是我使用该库的选择,我无法更改),我在刷新ng模型数据时遇到了一个问题(库中的radio组件在radio值更改时会执行一个简单的单击触发事件) 我注意到,虽然一次单击触发器对建模没有任何作用,但两次触发它可以解决问题(但这不是我想要解决这个问题的方式)。我准备了一个简单的例子来说明我的问题。首先单击按钮(执行下面代码中的changeInput(1,1))会对DOM进行更改,但对an

我正在使用radio/checkbox组件的jQuery库(是的,我知道使用jQuery不适合angular,但这不是我使用该库的选择,我无法更改),我在刷新ng模型数据时遇到了一个问题(库中的radio组件在radio值更改时会执行一个简单的单击触发事件)

我注意到,虽然一次单击触发器对建模没有任何作用,但两次触发它可以解决问题(但这不是我想要解决这个问题的方式)。我准备了一个简单的例子来说明我的问题。首先单击按钮(执行下面代码中的changeInput(1,1))会对DOM进行更改,但对angular model不做任何更改,而只单击单选按钮就可以了。执行changeInput(1,2)与单击radio元素的操作完全相同

function changeInput(obj, num){
    for(var i = 0; i < num; i++){
        $('input').eq(obj).click();
    }
}
函数更改输入(obj,num){
对于(变量i=0;i

我还能做什么?在阅读stackoverflow时,我注意到有人说触发“输入”可以解决问题,但不是在那种情况下()。触发两次单击是否是解决此问题的唯一方法?

我曾经遇到过一个类似的问题,即仅使用角度键。输入的ng绑定必须是控制器中定义的对象的属性。我认为,否则,输入值将绑定到输入范围中定义的变量

那是行不通的:

<input type="checkbox" ng-model="selected"></input>

在有角度的情况下,事情不会像你习惯的那样进行。一旦您习惯了它,您将享受代码更直接、更具声明性的特性

你说:
“在这个问题上,我只想知道如何更改模型”

然而,在您的尝试中,您试图通过更改视图(以编程方式)来进行模型更改。就可维护性而言,这既不直观,也是一场噩梦

在Angular中,您应该担心数据(模型),并观察视图自动调整

所以,如果你想更改模型,那么你需要做的就是…嗯,更改模型:

<input type="radio" name='test' ng-model="value" value="0" />
<input type="radio" name='test' ng-model="value" value="1" />
<button ng-click="changeInput(0)">Change value to 0</button><br/>
<button ng-click="changeInput(1)">Change value to 1</button><br/>

function Ctrl($scope) {
    $scope.value = 0;
    $scope.changeInput = function (newValue) {
        $scope.value = newValue;
    }
}

将值更改为0
将值更改为1
函数Ctrl($scope){ $scope.value=0; $scope.changeInput=函数(newValue){ $scope.value=newValue; } }
为了使Angular发挥其魔力并更新视图,您需要在Angular上下文中执行操作(
ng单击
,而不是
onclick
)。如果出于任何原因无法使用
ng单击
,则需要将代码包装到
$scope.apply()
中的
changeInput()
函数中,让Angular知道发生了什么变化。


另外,请参见此

为什么不使用?正如我所说的,我正在使用外部组件库,它在无线电更改时执行触发器(“单击”),我需要使用我的angular应用程序“使其工作”。现在还不清楚您在这里有什么限制?您可以更改哪些内容,哪些内容超出您的能力范围?ExpertSystem,在这个问题中,我只想知道如何进行模型更改,而不是触发两次单击。但在现实世界中,我想如果我的插件比点击两次更好的话,我可以请求拉拽:-)@patryk:你试过我的答案了吗?这对你有用吗?不幸的是,这也不起作用:-如果这是你的想法。逐个单击按钮1和按钮3不会对模型进行预期的任何更改。
$scope.someObject = {
 selected: false
};
<input type="radio" name='test' ng-model="value" value="0" />
<input type="radio" name='test' ng-model="value" value="1" />
<button ng-click="changeInput(0)">Change value to 0</button><br/>
<button ng-click="changeInput(1)">Change value to 1</button><br/>

function Ctrl($scope) {
    $scope.value = 0;
    $scope.changeInput = function (newValue) {
        $scope.value = newValue;
    }
}