为什么输入不能修改ng-repeat(和ng-switch)之外的值?

时间:2012-08-08 20:47:58

标签: angularjs

我假设范围问题是此示例中的输入可以修改其旁边的值而不是其他值的原因。如果是这种情况,我如何将模型连接到正确的范围?如果它不是范围问题,我做错了什么?

<html ng-app>
    <head>
        <script type="text/javascript" src="angular-1.0.1.min.js"></script>
        <script type="text/javascript">
            function ExampleCtrl($scope) {
                $scope.list = [
                    { name: "a" },
                    { name: "b" },
                ];

                $scope.value = 5;
            }
        </script>
    </head>
    <body ng-controller="ExampleCtrl">
        <ul ng-repeat="item in list">
            <li>{{ item.name }}
                <ng-switch on="item.name">
                    <span ng-switch-when="b">
                        <input type="number" ng-model="value" />
                        {{ value }}
                    </span>
                </ng-switch>
            </li>
        </ul>

        value is {{ value }}
    </body>
</html>

2 个答案:

答案 0 :(得分:7)

另一种方法 - 您可以使用$ parent访问父作用域。

<input type="number" ng-model="$parent.$parent.value" />

参见示例:http://jsfiddle.net/7Hh2R/

答案 1 :(得分:5)

你是对的ngRepeatngSwitch创建不同的范围。您可以使用适用于Chrome的精彩AngularJS Batarang开发人员工具查看不同的范围。

您可以在代码中引用相同值的一个更改是引用对象属性而不是基本类型,如:

$scope.value = { val: 5 };

并绑定到:

<input type="number" ng-model="value.val"/>
{{ value.val }}

我有兴趣看看是否有更好的方法来处理不同的范围。