2014-10-30 74 views
3

我试图绘制radioBoxes与角度数组,然后获取值的选中无线电,但型号不改变它的价值你,任何人都可以帮助我有了这个 ?AngularJS - 在ngrepeat中ngmpere没有更新('dotted'ngmodel)

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/

回答

7

需要设置$scope.radio是这样一个对象:

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

,然后从HTML访问它像这样:

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

这里的工作jsfiddle

可为什么这是必要的,这answer

从angularjs docs读了起来:

范围继承通常是直截了当的,你甚至不需要知道它正在发生......直到你尝试双向数据bindi (即,形成元素,ng-模型)到在子范围内在父范围上定义的基元(例如,数字,字符串,布尔值)。它不能像大多数人所期望的那样工作。会发生什么情况是,子作用域会获取自己的属性,该属性会隐藏/隐藏相同名称的父属性。这不是AngularJS正在做的 - 这是JavaScript原型继承的工作原理。

...

有'。'在你的模型中将确保原型继承的发挥。因此,使用

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

而不是

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

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

使用$父子范围中的.parentScopeProperty。这将阻止子范围 创建自己的属性。定义一个函数上 父范围,并从孩子调用它,传递原始 值到父(并不总是可能)

+0

大感谢的答案! ;) – 2014-10-30 11:00:19