为什么输入不能正常工作 ng-repeat

Why the inputs are not working right with ng-repeat

本文关键字:工作 ng-repeat 常工作 输入 不能 为什么      更新时间:2023-09-26

有人可以向我解释为什么在这个简单示例中我无法获得当前选定的单选按钮吗?我正在尝试使用 ng-repeat 指令动态生成单选按钮,并使用 ng-model 选择当前的单选按钮。喜欢这个:

模板:

<div ng-repeat="kind in movieKinds">
    <input type="radio" name="movies" ng-value="kind" ng-model="kindSelected"> {{kind.name}}<br>
</div>
Selected Movie :{{kindSelected}}

控制器:

mymodule.controller('MainCtrl', [ '$scope',function ($scope) {
    $scope.movieKinds = [
        {'name' : 'Action', 'movies' : ['Action#1', 'Action#2', 'Action#3']},
        {'name' : 'Comedy', 'movies' : ['Comedy#1', 'Comedy#2', 'Comedy#3']},
        {'name' : 'Drama', 'movies' : ['Drama#1', 'Drama#2']},
        {'name' : 'Horror', 'movies' : ['Horror#1']}
    ];
}]);

因为ng-repeat在每次迭代时都会创建一个新的子作用域(原型继承),当它重复一个模板时ng-repeat指令被放置。

那么,当ng-repeat创建新的原型继承子作用域时会发生什么情况?

在子作用域中,它承载primitive的所有属性 创建子范围和对象时获取的属性初始值 值与其引用一起获取,因此在父范围值中更新 将在子范围值中更新,反之亦然。

在您的例子中,您在ng-repeatng-model="kindSelected"变量,因此范围变量是在ng-repeat范围内创建的,并且在ng-repeat指令之外不可用。

要解决此问题,您可以在定义ng-model时使用object,以便在定义ng-model时可以遵循Dot rule。这意味着您可以在控制器中定义一个名为$scope.model的对象,然后添加kindSelected属性,以便在选择复选框时更新值。

标记

<div ng-repeat="kind in movieKinds">
    <input type="radio" name="movies" ng-value="kind" ng-model="kindSelected"> {{kind.name}}<br>
</div>
Selected Movie :{{model.kindSelected}}

法典

$scope.model = {};

解决此问题的另一种方法是使用controllerAs语法,该语法将使用控制器的别名,因此HTML上不会发生与范围层次结构相关的问题。无论您想要哪个控制器变量,都可以使用该控制器的别名。