当前位置: 首页 > 面试题库 >

为什么输入不能与ng-repeat一起正常使用

林铭
2023-03-14
问题内容

有人可以向我解释为什么在这个简单示例中我无法获得当前选择的单选按钮。我正在尝试使用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-model="kindSelected"变量内部,ng-repeat因此作用域变量在ng- repeat作用域内创建,而在外部ng-repeat指令中不可用。

要解决,你可以使用这样的问题object,同时限定ng-model,这样你可以遵循Dot rule,同时限定ng- model。这意味着您可以定义一个称为$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上不会发生与范围层次结构相关的问题。无论您要使用哪个控制器变量,都可以使用该控制器的别名。



 类似资料:
  • 问题内容: 我正在使用ApplicationTestCase测试一个Android应用程序。我想模拟我的AsyncTasks之一(示例简化为显示问题): 因此,为了设置测试,我做了以下工作: 然后,实际测试如下: 但是运行时出现异常: 为什么模拟AsyncTask的技术不起作用? 请注意,在这种简单情况下,删除会导致问题消失,但是对于我的实际测试,我确实需要创建应用程序。 问题答案: AsyncT

  • 问题内容: 我试图按照教程进行操作,但是此代码对我不起作用。有人可以解释为什么以及如何解决吗?我认为这与ng-controller有关,但不确定为什么。 问题答案: 您的代码无法与angular 1.3+一起使用,因为您正在将控制器定义为全局函数。 从AngularJS文档中: 从1.2迁移到1.3 控制器 由于3f2232b5,$ controller将不再在窗口上查找控制器。在控制器上查看窗口

  • 问题内容: 在下面的代码中,我试图使h1元素具有最高利润。当我在css中将位置设置为inline时,未显示上边距。但是,当我将其更改为inline-block时,它确实可以。我想知道是否有人可以解释为什么会这样。谢谢。 这是我的HTML: 这是CSS 问题答案: CSS2规范的9.2.4节规定: inline-block 此值使元素生成一个 内联级块容器 。内联块的内部被格式化为块框,元素本身被格

  • 问题内容: 我想使用ngMap将Google Maps添加到我的应用程序中。 演示是“静态的”,因为它们只有硬编码的HTML。我希望我的代码是“动态的”,因为它会定期要求服务器查看其数据库,并向我返回一堆坐标以进行绘制,该坐标将随时间而变化。我希望这是清楚的;如果没有,请询​​问更多细节。 我修改了ngmap标记演示,以便每两秒钟生成一些随机的经度/纬度坐标(而不是像最终应用程序那样去我的服务器)

  • 问题内容: 我是AngularJS的新手,正在用记号表构建仪表板。 试图将dygraphs网站上的示例代码放在ng-repeat- list中,以进行测试。对于y中的每个x,期望有相同的样本图。不幸的是,该图没有绘制,只是轴,控制台没有显示任何错误。 如果我删除ng-repeat,尽管可以(单个图形)工作- dygraphs代码有效。当然,像我在这里那样直接在视图中绘制图形没有任何意义,但我仍然想