String angularjs数据绑定对字符串变量不起作用?

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

我有两个版本的代码,一个不工作,另一个正常。 我的问题是“为什么不工作的那个不工作?” 这是JSFIDLE

不工作的版本: 控制器:

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" ];
            };