AngularJS:如何在angularjs中将数据从视图传递到控制器

Haz*_*aha 6 controller view angularjs

我正在开发一个添加/编辑/删除联系人的应用程序.以下是我添加联系人视图模板的方式:

<input placeholder="name" ng-model="contact.name" type="text">
<input placeholder="number" ng-model="contact.number" type="text">
<a href="#/"><button>Add</button></a>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器文件,用于添加的控制器是最后一个:

var myApp = angular.module('myApp', ['ngRoute']).config(function ($routeProvider) {
    $routeProvider.when('/contact/:index', {
        templateUrl: 'partials/edit.html',
        controller: 'Edit'
    }).when('/', {
        templateUrl: 'partials/contacts.html'
    }).when('/add', {
        templateUrl: 'partials/add.html',
        controller: 'Add'
    })
    .otherwise({ redirectTo: '/' });
}).controller('Contacts',  ['$scope',function($scope){
    $scope.contacts = [
    {name:'Hazem', number:'01091703638'},
    {name:'Taha', number:'01095036355'},
    {name:'Adora', number:'01009852281'},
    {name:'Esmail', number:'0109846328'}
    ];
}]).controller('Edit', ['$scope','$routeParams',function($scope,$routeParams){
    $scope.contact = $scope.contacts[$routeParams.index];
    $scope.index = $routeParams.index;
}]).controller('Add', ['$scope', function($scope){
    $scope.contacts.push({name: contact.name, number: contact.number});
}]);
Run Code Online (Sandbox Code Playgroud)

我在chrome检查器中遇到错误:ReferenceError:未定义contactname

syl*_*ter 7

请看下面

使用标签的<button ng-click="Add()">Add</button>instaed<a>

var myApp = angular.module('myApp', [])
.controller('Add', ['$scope', function($scope){
  $scope.contacts = [];
  $scope.Add = function() {
    $scope.contacts.push({name: $scope.contactname, number: $scope.contactnumber});
    }
}]);
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
  <div ng-controller="Add">
<input placeholder="name" ng-model="contactname" type="text">
<input placeholder="number" ng-model="contactnumber" type="text">
<button ng-click="Add()">Add</button>
 
    <ul>
    <li ng-repeat="con in contacts">{{con.name}} {{con.number}}</li>
    </ul>
    
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)
在添加控制器更改中

.controller('Add', ['$scope', function($scope){
    $scope.contacts.push({name: contactname, number: contactnumber});
}]);

.controller('Add', ['$scope', function($scope){
    $scope.contacts.push({name: $scope.contactname, number: $scope.contactnumber});
}]);
Run Code Online (Sandbox Code Playgroud)


Joa*_*eal 6

controller('Add', function(){
    this.contacts.push({name: contactname, number: contactnumber});
}]);
Run Code Online (Sandbox Code Playgroud)

每个控制器都有自己的范围,在Add控制器中,您只是尝试将未定义的内容推送到也未定义的变量中$scope.contacts.

另外在您的视图中,当您将某些内容传递给ng-model时,这基本上是在控制器中具有该名称的变量之间创建双向数据绑定.所以在这种情况下,你的html将创建两个变量:$scope.contactname$scope.contactnumber.

在您的视图中,您还调用了一个函数Add(),该函数尚未在您的控制器上定义.

以下是您的控制器应该是什么样子:

controller('Add', function(){
   var vm = this;
   vm.contacts = []; //you declare your array of contacts in the controllers scope
   //vm.contacts = getContactsFromDB(); //typically you'd be getting your initial list from a DB

   //As good practice, you should initialize the objects in your scope:
   vm.contactname = '';
   vm.contactnumber = '';

   vm.Add = function() {
     vm.contacts.push({name: vm.contactname, number: vm.contactnumber});
     //Also you could add the data to a database
     /*
       ContactService
       .AddNewContact(vm.contactname, vm.contactnumber)
       .then(function(){
              vm.contacts.push(
                  {name: vm.contactname, number: vm.contactnumber});
       });
     */

     //Finally you should reset the form variables
     vm.contactname = '';
     vm.contactnumber = '';
   }  


}]);
Run Code Online (Sandbox Code Playgroud)