AngularJS - ngmodel in ngrepeat not update ('dotted' ngmodel)



我正在尝试用角度数组绘制radioBoxes,然后获得检查的radio的值,但模型不会改变它的值你,有人能帮我吗?

HTML部分

<div ng-app>
    <div ng-controller="CustomCtrl">
        <label ng-repeat="user in users">
            <input type="radio" name="radio" ng-model="radio" value="{{user.name}}" /> {{user.name}} 
        </label>
        <br/>
        {{radio}}
        <br/>
        <a href="javascript:void(0)" ng-click="saveTemplate()">Save</a>
    </div>
</div>

角度零件

function CustomCtrl($scope) {
    $scope.radio = "John";
    $scope.users = [
        {"name" : "John", "Year" : 18},
        {"name" : "Tony", "Year" : 19}
    ];
    $scope.saveTemplate = function() {
        console.log($scope.radio);
    };
}

你可以在这里看到例子-http://jsfiddle.net/hgf37bo0/2/

您需要将$scope.radio设置为如下对象:

$scope.radio = {
  name: 'John'
}

然后像这样从html访问:

<input type="radio" name="radio" ng-model="radio.name" value="{{user.name}}" />

这是一个正在工作的jsfiddle

你可以在这个答案中阅读为什么这是必要的

来自angularjs文档:

作用域继承通常很简单,而且您通常甚至不需要知道它正在发生。。。直到您尝试从子作用域内部将双向数据绑定(即表单元素、ng模型)绑定到父作用域上定义的基元(例如数字、字符串、布尔值)。它并没有按照大多数人期望的方式工作。结果是,子作用域获得了自己的属性,该属性隐藏/隐藏了同名的父属性。这不是AngularJS正在做的事情——这就是JavaScript原型继承的工作方式。

有一个"。"在您的模型中将确保原型继承发挥作用。所以,使用

<input type="text" ng-model="someObj.prop1"> 

而不是

<input type="text" ng-model="prop1">

如果你真的想/需要使用原语,有两种解决方法:

在子作用域中使用$parent.parentScopeProperty。这将防止子作用域创建自己的属性。在上定义函数父作用域,并从子作用域调用它,传递基元值达到父(并非总是可能的)

最新更新