ng-model内置无线电输入刷新

时间:2014-05-14 11:38:16

标签: javascript jquery html angularjs

我正在使用jQuery库的radio / checkbox组件(是的,我知道使用jQuery是不好用的角度,但这不是我选择使用该库,我无法改变它)我刷新了一个问题ng-model数据(当无线电值改变时,库中的无线电组件会执行简单的单击触发事件。)

我注意到,虽然单击触发器不会对模型进行任何建模,但触发它两次可以解决问题(但这不是我希望解决此问题的方式)。我准备了一个简单的fiddle - 我的问题的一个小例子。首先在按钮上单击(在下面的代码中执行changeInput(1,1))会对DOM进行更改,但对角度模型不做任何操作 - 而单击单选按钮就可以了。执行changeInput(1,2)与点击无线电元素非常相似。

function changeInput(obj, num){
    for(var i = 0; i < num; i++){
        $('input').eq(obj).click();
    }
}

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

2 个答案:

答案 0 :(得分:1)

在Angular中,事情并不像你习惯的那样有效。一旦你习惯了它,你将享受代码更加直接和声明的本质。

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

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

在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;
    }
}

<子> 为了让Angular发挥其神奇作用并更新视图,您需要在Angular上下文中执行操作(ng-click而不是onclick负责处理)。如果由于某种原因您无法使用ng-click,则需要通过将代码包装在changeInput()中的$scope.apply()函数中来让Angular知道更改的内容。

另请参阅此 short demo

答案 1 :(得分:0)

一旦只使用角度,我就遇到了类似的问题。输入的ng绑定必须是控制器中定义的对象的属性。我认为否则,输入值被绑定到输入自己范围中定义的变量。

这不起作用:

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

但那会:

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

例如在你的控制器中:

$scope.someObject = {
 selected: false
};