ng-repeat,单击修改输入

时间:2016-05-20 01:18:58

标签: angularjs

<input ng-model = "val">
<a href ng-click="val = 1"> val = 1 </a>
<div class="test" ng-controller="Ctrl">
<table>
<thead>
  <tr>
    <th>let</th>
    <th>num</th>
  </tr>
</thead>
<tbody>
  <tr ng-repeat="thing in data">
    <td>
    <a href ng-click="val = 1">
      {{thing.let}}
    </a>
    </td>
    <td>{{thing.num}}</td>
  </tr>
</tbody>

有没有办法根据ng-repeat中的点击进行输入更改? 在这个jsfiddle中,你可以通过ng-repeat之外的点击来改变输入,但是在重复中它不会改变输入。

http://jsfiddle.net/Hp4W7/2403/

2 个答案:

答案 0 :(得分:1)

问题是您在由val创建的子范围中设置ng-repeat属性。

解决方案是创建一个将此值分配给父作用域的函数:

$scope.changeVal = function(val){
    $scope.$parent.val = val;
}

并使用ng-click="changeVal(1)"

进行调用

在这里小提琴:http://jsfiddle.net/nawd7jjc/

答案 1 :(得分:0)

ng-repeat总是为每次迭代创建新的范围,所以如果你在ng-repeat中更改任何原始值(&#34; val&#34;在这种情况下),那么它将不会引用实际的&#34; val& #34 ;.所以要解决它,它应该是一个对象类型,例如。 obj.val的东西

以下是此问题的可行解决方案:

<div class="test" ng-controller="Ctrl" ng-init="obj.val=12345">

    <input ng-model = "obj.val">
    <a href ng-click="obj.val = 2"> val = 2 </a>

    <table>
            <thead>
                <tr>
                    <th>let</th>
                    <th>num</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="thing in data">
                    <td>
                        <a href ng-click="obj.val = thing.num">
                            {{thing.let}}
                        </a>
                    </td>
                    <td>{{thing.num}}</td>
                </tr>
            </tbody>
    </table>

<div>