AngularJS ng-repeat下使用ng-model

来源:互联网 发布:淘宝电视机19寸 编辑:程序博客网 时间:2024/06/10 09:04

AngularJS ng-repeat下使用ng-model

表格
如图所示,想要实现点击确定修改后,得到input中的值,因此尝试用下面的代码实现:

<tr ng-repeat="item in info ">       <input type="text" ng-show="aa && item.uId==index" ng-value="item.uName" ng-model="modifName">       <input type="text" ng-show="aa && item.uId==index" ng-value="item.uPwd" ng-model="modifPwd">   </tr>

通过在repeat里给每一个input绑定ng-model,当点击修改按钮后,将输入input的新值,分别用两个变量modifName、modifPwd接收.但是结果console出来都是undefined,为什么


原因:

如果,你对angularJs的$scope,有深入了解,也许这个问题就迎刃而解了。原因就在,ng-repeat、ng-switch、ng-view、ng-include都会创建一个新的子scope,所以问题经常在这些指令中出现。

进行原型继承即意味着父作用域在子作用域的原型链上,这是JavaScript的特性。AngularJS的作用域还存在如下内部定义的关系:

scope.parentscopescope.childHeadscopescope.childTailscopescope.nextSiblingscopescope.prevSiblingscopeAngularJSbroadcast和emit广digest处理等。

关于scope作用域,这篇翻译自英文的文章阐述的非常详细。 理解AngularJS的作用域Scope


解决方法:

  1. 在子作用域中使用 parent.parentScopePropertyngrepeatitem使parent指向父作用域最好的方式。这里具体代码:

    <input type="text"   ng-model="$parent.modifName">
  2. 遵循一个原则:避免这个问题的最佳实践是在ng-model中总使用“.“,例如:

    更好:

    <input type="text"   ng-model="obj.modifName">

    不推荐

    <input type="text"   ng-model="modifName">

    第二个方法需要在父作用域定义obj,

    $scope.obj={modifName:”“};

  3. 在父作用域中定义函数,子作用域通过原型继承调用函数把值传递给父作用域(这种方式极少使用)。

0 0