Показать подзадачи (связанные с задачей) в Angular JS - PullRequest
0 голосов
/ 20 мая 2018

Извините, если название озадачило, я создаю веб-приложение, которое позволяет пользователю добавлять задачи и подзадачи. Мне удалось сделать угловой, чтобы получить задачи из базы данных (mongodb) и показать результат в моемфайл dashboard.html.Но у меня проблемы с подзадачами.У меня есть кнопка для каждой задачи, и при нажатии на нее должны отображаться все подзадачи, которые относятся к этой задаче.В текущей ситуации проблема заключается в том, что когда я хочу видеть подзадачи, принадлежащие одной задаче, они отображаются как подзадачи всех моих задач.

My dashboard.html выглядит следующим образом:

<body ng-app="dashboard">
    <div class="container list-group list-group"  ng-controller="dashboardCtrl">
        <ul ng-repeat="task in tasks" class="list-group-item list-group-item-action">
            <li class="list_style">
                <span>{{task.name}}</span><span>{{task.description}}</span>
                <span><button class="btn btn-danger" ng-click="remove(task._id)">Delete</button></span>
                <span><button class="btn btn-info" ng-click="edit(task._id)">Edit</button></span>
                <span><button class="btn btn-info" ng-click="addTask(task._id)">Add new task</button></span>
                <span><button class="btn btn-success" ng-click="showTasks(task._id)">+</button></span>
            </li>
            <ul ng-repeat="subTask in subTasks" class="list-group-item list-group-item-action active" 
                style="margin-top: 10px;">
                    <li>{{subTask.name}}</li>
                    <li>{{subTask.description}}</li>
                    <li>{{subTask.due_date}}</li>
            </ul>
        </ul>    
    </div>
</body>

Мой контроллер выглядит следующим образом:

var app = angular.module('dashboard', []);
app.controller('dashboardCtrl', function($scope, $http, $window){

    ///////Used to get all the tasks from the database

     var refresh = function() {
        $http.get('api/tasks').then(function(response) {
          $scope.tasks = response.data;
          console.log("Data retrieved successfully");
          console.log(response);
        });
      };
      refresh();

      ///////Used to get the all the sub-tasks belonging to task with specified id

      $scope.showsubTasks = function(id){
        $http.get('api/task/'+ id).then(function(response) {
            console.log("Data retrieved successfully");
            console.log(response);
            $scope.subTasks = response.data.subTasks;
          });
      }  
})

И моя схема задачи выглядит следующим образом:

const mongoose=require("mongoose");

const taskSchema=mongoose.Schema({
    name:{
        type: String,
        required: true
    },
    description:{
        type: String,
        required: true
    } ,
     subTasks:[{
        name:{
            type: String,
            required: true
        },
        description:{
            type: String,
            required: true
        },
        due_date:{
            type: String,
            required:true
        }
     }]
});
const list = module.exports = mongoose.model("list", listSchema);

Файл index.js:

///// to get the tasks
router.get("/tasks", (req,res)=>{
    task.find((err, lists)=>{
        res.json(tasks);
    })

});

////// to get the sub-tasks from a task with specified id

router.get("/task/:id", (req,res)=>{
    task.findOne({_id:req.params.id},'sub_tasks',(err, sub_tasks)=>{
        res.json(sub_tasks);
    })

});

Я считаю, что проблема в: $scope.subTasks = response.data.subTasks;, поскольку подзадачи - это массив, из которого происходят подзадачи или куда все подзадачи выдвигаются, когда мы получаем их из базы данных, но я нахожу невозможным найтирешение прямо сейчас.Спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Думаю, вы должны создать подзадачи внутри li, а не в ul.

ваш код выглядит так:

<ul ng-repeat="task in tasks" class="list-group-item list-group-item-action">
        <li class="list_style">
            <span>{{task.name}}</span><span>{{task.description}}</span>
            <span><button class="btn btn-danger" ng-click="remove(task._id)">Delete</button></span>
            <span><button class="btn btn-info" ng-click="edit(task._id)">Edit</button></span>
            <span><button class="btn btn-info" ng-click="addTask(task._id)">Add new task</button></span>
            <span><button class="btn btn-success" ng-click="showTasks(task._id)">+</button></span>
        </li>
        <ul ng-repeat="subTask in subTasks" class="list-group-item list-group-item-action active" 
            style="margin-top: 10px;">
                <li>{{subTask.name}}</li>
                <li>{{subTask.description}}</li>
                <li>{{subTask.due_date}}</li>
        </ul>
    </ul>    

, и вы должны изменить его на:

<ul ng-repeat="task in tasks" class="list-group-item list-group-item-action">
        <li class="list_style">
            <span>{{task.name}}</span><span>{{task.description}}</span>
            <span><button class="btn btn-danger" ng-click="remove(task._id)">Delete</button></span>
            <span><button class="btn btn-info" ng-click="edit(task._id)">Edit</button></span>
            <span><button class="btn btn-info" ng-click="addTask(task._id)">Add new task</button></span>
            <span><button class="btn btn-success" ng-click="showTasks(task._id)">+</button></span>
        </li>
        <li>
        <ul class="list-group-item list-group-item-action active" 
            style="margin-top: 10px;">
                <li ng-repeat="subTask in task.subTasks">
                {{subTask.name}}
                {{subTask.description}}
                {{subTask.due_date}}
                </li>
        </ul>
        </li>
    </ul>   

вы можете отправить атрибут angularjs, который вызвал: $index он даст вам текущий индекс, с которым связана задача, и отправит его также для работы, и после того, как вы получите ответ для подзадач, вы должны присоединить его к правильномувот такая задача:

$scope.tasks[i].subTasks = response.data;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...