2017-03-04 1 views
0

非常に単純な問題ですが、解決できない問題があります。AngularJS ToDo Listアプリケーション - 入力なしでテキストなしでリストに追加しています

現在、追加ボタンをクリックしてタスクを追加しているが、実際のテキストを入力からリストにプッシュしていないAngular ToDoアプリケーションを開発しようとしています。リストに項目を追加しますが、テキストは追加しません。

コデペン:http://codepen.io/anon/pen/Mpepzy

HTML:

<!DOCTYPE html> 

<head> 

    <meta charset="utf-8"> 

    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <meta name="description" content="Nick Cook"> 

    <meta name="author" content="Nick Cook"> 

    <title>NC - Angular Project - ToDo App</title> 

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css"> 

    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css"> 

    <link href="https://fonts.googleapis.com/css?family=Roboto:400,900|Open Sans:400,700" rel="stylesheet"> 

    <link rel="stylesheet" href="css/style.css"> 

</head>  

<body ng-app="todoApp"> 

    <main> 

     <md-content layout="row"> 

      <md-card class="md-padding" ng-controller="todoController"> 

       <div><md-card-title> 

        <md-card-title-text> 

         <span class="md-headline">ToDo List</span> 

         <span class="md-subhead">AngularJS Material Application</span> 

        </md-card-title-text> 

       </md-card-title></div> 
       </md-card-title></div> 

       <form class="md-padding"> 

        <div layout-gt-sm="row"> 

         <md-input-container class="md-block" flex-gt-sm> 

          <label>Add New Task</label> 

          <input type="text" ng-model="taskName" size="50"> 

         </md-input-container> 

        </div> 

        <md-button ng-click="addTask()" class="md-raised md-primary">ADD</span></md-button> 

       </form> 

       <md-list class="md-padding"> 

        <md-subheader class="md-no-sticky">Current Tasks</md-subheader> 

        <md-list-item ng-repeat="task in taskList"> 

         <p>{{task.name}}</p> 

        <md-checkbox class="md-secondary" ng-model="task.completed"></md-checkbox> 

       </md-list-item> 

       </md-list> 

       <md-card-actions layout="row" class="md-padding"> 

        <md-menu flex> 

         <md-button ng-click="$mdOpenMenu($event)" class="md-raised md-primary" aria-label="Menu"><span class="fa fa-gear fa-lg"></span></md-button> 

         <md-menu-content width="3"> 

          <md-menu-item> 

           <md-button ng-click="ctrl.menuItemClick($index)"> 

            <div layout="row"> 

             <p flex>Page One</p> 

            </div> 

           </md-button> 

          </md-menu-item> 

          <md-menu-item> 

           <md-button ng-click="ctrl.menuItemClick($index)"> 

            <div layout="row"> 

             <p flex>Page Two</p> 

            </div> 

           </md-button> 

          </md-menu-item> 

          <md-menu-item> 

           <md-button ng-click="ctrl.menuItemClick($index)"> 

            <div layout="row"> 

             <p flex>Page Three</p> 

            </div> 

           </md-button> 

          </md-menu-item> 

         </md-menu-content> 

        </md-menu> 

       </md-card-actions> 

      </md-card> 

     </md-content> 

    </main> 

    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> 

    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script> 

    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script> 

    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script> 

    <script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script> 

    <script src="js/app.js"></script> 

</body> 

JS:ng-repeat

var app = angular.module('todoApp', ['ngMaterial']); 

function menuController ($scope, $mdDialog) { 
    var originatorEv; 
    this.openMenu = function($mdOpenMenu, ev) { 
     originatorEv = ev; 
     $mdOpenMenu(ev); 
    }; 
}; 

app.controller('todoController', function($scope) { 

    $scope.taskList = []; 

    $scope.addTask = function() { 
     $scope.taskList.push($scope.taskName); 
    }; 

}); 

答えて

2

は、あなたが名前をレンダリングしようとしているプロパティはタスクです。

これは存在しません。 taskListは文字列の配列です。

<md-list-item ng-repeat="task in taskList"> 
    <p>{{task.name}}</p> <---- there is no 'name' property of task 
    <!-- md-checkbox --> 
</md-list-item> 

対処: プッシュタスクリストの配列へのオブジェクト。例えば

$scope.taskList.push({name: $scope.taskName});

0

はあなたがcodepenに更新

$scope.addTask = function() { 
    var task = {name: $scope.taskName}; 
    $scope.taskList.push(task); 
    $scope.taskName = ""; 
}; 
0

のようなあなたのaddTask機能を更新する必要があります。

{name: $scope.taskName} 
http://codepen.io/ssthil/pen/LWbaXo

$scope.addTask = function() { 
     $scope.taskList.push({name: $scope.taskName}); 
     $scope.taskName = ""; 
    }; 

あなたは、配列の中に押すと、

入力をクリアするため

$scope.taskName = ""; 
関連する問題