2015-07-02 4 views
0

У меня есть таблица. Когда я хочу вставить новую строку, она откроет новое диалоговое окно, через это окно я вставляю строку в таблицу.Как вставить новую строку в таблицу из дочернего контроллера в angularjs

Это новое диалоговое окно имеет дочерний контроллер addNewTaskCtrl, В этом диалоговом окне есть форма, когда я нажимаю кнопку добавления, после чего она будет вставлять данные в таблицу. Я пробовал, но не смог подключить ng-модель ребенка с родителем, пожалуйста, SEE DEMO. Пожалуйста, нажмите кнопку ADD Task.

Я также попытался вставить новую строку в таблицу без использования контроллера ребенка, пожалуйста, см, DEMO, но не удалось. index.html

<!DOCTYPE html> 
<html> 

<head> 
<title>ToDo API Client Demo</title> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script> 
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"> 
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> 

</head> 

<body ng-app="myApp" ng-controller="tasksCtrl"> 
    <div class="navbar"> 
     <div class="navbar-inner"> 
      <a class="brand" href="#">ToDo API Client Demo</a> 
     </div> 
    </div> 
    <div> 

     <table class="table table-striped"> 
      <tr><td style="width: 1px;"></td><td><b>Task</b></td><td><b>Options</b></td></tr> 
      <tr ng-repeat="task in tasks"> 
       <td> 
        <span data-bind="visible: done" class="label label-success">Done</span> 
        <span data-bind="visible: !done()" class="label label-important">In Progress</span> 
       </td> 
      <td>{{task.title}}</td> 
      <td>{{task.description}}</td> 
         <td> <a class="btn" data-toggle="modal" data-target="#modal" ng-click="editTask(task)">Edit</a></td> 
       <td> <a class="btn" data-toggle="modal" data-ng-click="removeRow(task)">Delete</a></td> 

       <td> 
        <span data-bind="visible: done"> 
          <button data-bind="click: $parent.markInProgress" class="btn">Mark In Progress</button> 
        </span> 
       </td> 
         <td> 
        <span data-bind="visible: !done()"> 
          <button data-bind="click: $parent.markDone" class="btn">Mark Done</button> 
        </span> 
       </td> 
      </tr> 
     </table> 

      <a class="btn" data-toggle="modal" data-target="#add" ng-click="editTask(task)">Add Task</a> 
    </div> 
    <div id="modal" role="dialog" class="modal hide fade"> 
     <div> 
      <div class="modal-header"> 
       Task Dialog 
      </div> 
      <div class="modal-body"> 
       <label for="txtName"></label> 
       <input type="text" ng-model="selectedTask.title" /> 
       <input type="text" ng-model="selectedTask.description" /> 
      </div> 
      <div class="modal-footer"> 
       <button class="btn btn-primary" ng-click="saveTask()" data-dismiss="modal">OK</button> 
      </div> 
     </div> 
    </div> 

    <div id="add" class="modal hide fade" tabindex="=1" role="dialog" aria-labelledby="addDialogLabel" aria-hidden="true" ng-controller="addNewTaskCtrl"> 
     <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 
      <h3 id="addDialogLabel">Add Task</h3> 
     </div> 
     <div class="modal-body"> 
      <form class="form-horizontal"> 
       <div class="control-group"> 
        <label class="control-label" for="inputTask">Task</label> 
        <div class="controls"> 
         <input type="text" id="inputTask" ng-model="$parent.task" placeholder="Task title" style="width: 150px;"><br /> 
        </div> 
       </div> 
       <div class="control-group"> 
        <label class="control-label" for="inputDescription">Description</label> 
        <div class="controls"> 
         <input type="text" id="inputDescription" ng-model="$parent.description" placeholder="Description" style="width: 300px;"> 
        </div> 
       </div> 
      </form> 
     </div> 
     <div class="modal-footer"> 
      <a class="btn btn-primary" data-toggle="modal" ng-click="addNewTask()">Add Task</a> 
      <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button> 
     </div> 
    </div> 


    <script> 
    var app = angular.module('myApp', []); 
    app.controller('tasksCtrl', function($scope, $http) { 
     $http.get("data.json") 
     //$http.get("/todo/api/v1.0/tasks") 
     .success(function(response) { 
      console.log(response.tasks) 
      $scope.tasks = response.tasks; 
     }); 

     $scope.editTask=function(task) { 
      $scope.selectedTask = task; 
     }; 
     $scope.removeRow = function (task) { 
      $scope.tasks.splice(task, 1); 
     }; 

    }); 
    app.controller('addNewTaskCtrl', ['$scope', function($scope){ 
     $scope.addNewTask=function(){ 
      var task; 
     } 
    }]); 

    </script> 
</body> 

</html> 

ответ

0

Есть два способа сделать это:

  1. Создайте объект, который передается в обоих контроллерах Example

  2. широковещательных переход от контроллера ребенка и следите за ним в родительском контроллере, перейдя в корневой каталог $.

Так что в вашем addCntrl:

$rootScope.$broadcast("addedTask", newTask); 

И в вашем tasksCntrl

$scope.$on('addedTask', function(newTask){//handle stuff }); 

Надежда это помогает.

Смежные вопросы