首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ng-controller中编辑功能

在ng-controller中编辑功能
EN

Stack Overflow用户
提问于 2014-04-17 06:04:06
回答 1查看 1.4K关注 0票数 0

我正在尝试显示控制器中的对象列表,然后尝试编辑它们。

我将名为editContact的数据绑定到输入文本框中的值。我想在作用域中设置一个变量ii,然后在编辑完成后,将contactsii替换为临时对象editContact。但是ii没有被识别。我可以设置一个像ii这样的变量吗?

代码语言:javascript
复制
    <!doctype html>
<html ng-app>
<head>
<style>
</style>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>

</head>
<body>
<div ng-controller="contactsController">
<label>Name</label>
    <input ng-model="name" type="text" placeholder="Name">
<label>email</label>
<input ng-model="email" type="text" placeholder="Email">
<button ng-click="addContact()">Add contact</button>
<div>{{contactsController.name}}</div>
<div>
    <ul>

        <li ng-repeat="contact in contacts">
            <div>{{contact.name}}</div>
            <div>{{contact.email}}</div>
            <div><button ng-click="deleteContact($index)">delete</button></div>
            <div><button ng-click="editContact($index)">Edit</button></div>

        </li>
    </ul>
    <input type="text"  value="{{editContact.name}}"/>
    <input type="text"  value="{{editContact.email}}"/>
    <button ng-click="changeValue(ii)">Edit</button>
</div>
</div>
<script>
// Your code goes here.

    // $( document ).ready(function() {
    //  alert('jQuery asdfas!');
// Your code here.
// });
function contactsController($scope){
    $scope.contacts=[{name:'asdf',email:'asdf'},
    {name:'yweuir',email:'xcvzx'}
    ];
    contactsController.prototype.addContact =function(){
        console.log(this.name);
        console.log(this.email);
        this.contacts.push({name:this.name,email:this.email});
    }

    $scope.changeValue=function(){
        $scope.contacts[$scope.ii]=$scope.editContact;
    }

    $scope.editContact=function(i){
        $scope.editContact=$scope.contacts[i]
        $scope.ii=i;
    }
}
</script>

</body>
</html>
EN

回答 1

Stack Overflow用户

发布于 2014-04-17 06:20:46

首先,在DOM中,总是用ngModel绑定输入框的属性。示例:

代码语言:javascript
复制
<input type="text" ng-model="editContact.name"/>

其次,永远不要使用$index作为在控制器中查找内容的参考点。您应该使用对象本身。示例:

代码语言:javascript
复制
<li ng-repeat="contact in contacts">
  <button ng-click="editSomeContact(contact)"></button>
</li>

那么你的JavaScript应该是这样的:

代码语言:javascript
复制
$scope.addContact = function() {
  $scope.contacts.push({name: '', email: ''});
};

$scope.editSomeContact = function(contact) {
  $scope.editContact = contact;
};

$scope.deleteContact = function(contact) {
  var index = $scope.contacts.indexOf(contact);
  if(index > -1) {
    $scope.contacts.splice(index, 1);
  }
  if($scope.editContact === contact){
     $scope.editContact = null;
  }
};

此时,您不需要changeValue函数,因为您将看到列表中的联系人将使用编辑后的字段进行更新,因为这两个位置的值都是动态绑定的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23120984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档