簡體   English   中英

AngularJS應用中的未定義范圍變量

[英]Undefined scope variable in AngularJS app

我正在嘗試在我的作用域內的數組對象中的元素上設置布爾屬性。

在下面給出的代碼中,當我嘗試設置task [id] .deleted = true時,出現以下錯誤。

angular.js:12798 TypeError: Cannot set property 'deleted' of undefined
at Scope.$scope.delete (main.js:54)

我要去哪里錯了?

我的整個代碼文件是:

angular.module('ngMaterialTaskListApp')
.controller('MainCtrl', function ($scope, $mdDialog, TaskService) {

    // Model from which View populates data
    $scope.tasks = [];
    console.log($scope.tasks);

    $scope.showAddDialog = function (ev) {
        $mdDialog.show({
            controller: DialogController,
            templateUrl: '../views/add-dialog-template.html',
            parent: angular.element(document.body),
            targetEvent: ev,
            clickOutsideToClose: true,
            fullscreen: true, //Only for xs and sm screen sizes
            locals: { //For DialogController, as tasks
                tasks: $scope.tasks
            }
        });
    };
    /*----------- Function to delete items onClick of delete icon -----------*/
    $scope.delete = function (id) {
        console.log($scope.tasks[id]);
        console.log(id);
        // console.log($scope.tasks[id].name);
        $scope.tasks[id].deleted = true;
    };

    /*----------- DialogController function -----------*/
    function DialogController($scope, $mdDialog, tasks) {
        $scope.task = {};
        $scope.hide = function () {
            $mdDialog.hide();
            //TODO Add a message as to what happened
        };
        $scope.cancel = function () {
            $mdDialog.cancel();
            //TODO Add a message as to what happened
        };
        /*----------- Method show the add dialog -----------*/
        $scope.addData = function () {
            if (null !== $scope.task.name && null !== $scope.task.description) {
                /*----------- Using moment.js to parse date and time -----------*/
                $scope.task.date = moment($scope.task.date, '').format('DD MMM YYYY');
                $scope.task.time = moment($scope.task.time, '').format('h:mm a');
                $scope.task.done = false; // Every new task is pending!
                $scope.task.deleted = false; // Every new task exists!
                var GlobalID = Date.now();
                console.log(GlobalID);
                $scope.task.id = GlobalID;
                /*----------- Performing http POST -----------*/
                TaskService.postTask($scope.task);
                /*----------- Pushing to tasks object in $scope of MainCtrl -----------*/
                // Have to update tasks again
                tasks.push($scope.task);
                $scope.hide();
                console.log(tasks); //DEBUGGING
            } else {
                //TODO ADD INVALID/NULL DATA WARNING
            }
        };
    };
    // DEPRECATED - USED FOR DATA WHEN SERVER NOT AVAILABLE
    TaskService.getTasks().then(function (response) {
        $scope.tasks = response.data.tasks;
    }, function (error) {
        console.log(error + "This");
    });
    //USING THIS TO GET DATA FROM SERVER
    TaskService.getAllTasks().then(function (response) {
        // console.log(response.data);
        $scope.tasks = response.data;
        console.log($scope.tasks);
    });
});

你的html怎么樣? 我敢打賭,這是在ng-repeat的按鈕內:

ng-click="delete(task.id)"

嘗試這樣放:

ng-click="delete($index)"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM