String angularjs数据绑定对字符串变量不起作用?
我有两个版本的代码,一个不工作,另一个正常。 我的问题是“为什么不工作的那个不工作?” 这是JSFIDLE 不工作的版本: 控制器:String angularjs数据绑定对字符串变量不起作用?,string,angularjs,variables,data-binding,String,Angularjs,Variables,Data Binding,我有两个版本的代码,一个不工作,另一个正常。 我的问题是“为什么不工作的那个不工作?” 这是JSFIDLE 不工作的版本: 控制器: function Ctrl($scope) { $scope.username = "username"; $scope.users = [ "Matteo", "Marco", "Michele" ]; }; function usersCtrl($scope) { $scope.names = {username: "username
function Ctrl($scope) {
$scope.username = "username";
$scope.users = [ "Matteo", "Marco", "Michele" ];
};
function usersCtrl($scope) {
$scope.names = {username: "username"};
$scope.users = [ "Matteo", "Marco", "Michele" ];
};
HTML:
HTML:
工作示例
{{user}}
所选:{names.username}
Ng重复创建它们自己的隔离作用域,这就是为什么字符串没有被保留,因为它不是通过引用传递的。如果要更新模型,请使用
<input type="radio" ng-model="$parent.username" name="usern" ng-value="user" />
$parent允许您访问ng repeat之外的父作用域,该作用域应该是您想要的。这是因为javascript管理函数参数的方式 理解它的简单方法是字符串、数字和布尔参数总是按值发送,而对象和函数总是按ref发送,这就是为什么在ng模型中使用点意味着对对象进行引用,而在ng模型中不使用点,您引用的字符串、数字或布尔值实际上是实变量的副本
更多信息请参见此处,以及您的非工作代码的答案: HTML:
<h1> Not working example</h1>
<div ng-controller="Ctrl">
<div ng-repeat="user in users">
<input type="radio" ng-model="names.usern" name="usern" ng-value="user" />
<strong>{{user}}</strong>
</div>
<div>selected: {{names.usern}}</div> //Changed line here
</div>
这是一个很好的解释,它现在清楚地表明:-)这是有效的!,它没有在ng repeat作用域内使用变量的副本,而是使用父作用域定义的副本,换句话说,它强制通过引用传递字符串变量。。。
<input type="radio" ng-model="$parent.username" name="usern" ng-value="user" />
<h1> Not working example</h1>
<div ng-controller="Ctrl">
<div ng-repeat="user in users">
<input type="radio" ng-model="names.usern" name="usern" ng-value="user" />
<strong>{{user}}</strong>
</div>
<div>selected: {{names.usern}}</div> //Changed line here
</div>
function Ctrl($scope) {
$scope.names = {usern: "usern"}; //Also need to change this
$scope.users = [ "Matteo", "Marco", "Michele" ];
};