角度范围内的值未定义

时间:2017-10-14 06:29:41

标签: javascript java angularjs

我有一个删除项目的方案。 为此,首先我得到一个具有特定条件的值列表。检索到的值将在UI中显示,并带有单选按钮,以选择要删除的特定项目。

我已将单选按钮的值指定为检索到的项目的ID。此id用于angularJS方法中进行删除。目前在控制器内的角度函数中获得未定义的值。

我的角度控制器如下:

async function insertData() {
    for (let index = 1; index <= 3; index++) {
        console.log("Insert Data?");
        prompt.start();
        let input = await new Promise(resolve => {
            prompt.get(['data'], (err, result) => {
                resolve(result);
            }
        });
        // do something with input
    }
}

insertData().then(() => console.log("Done prompting."));

我的html页面代码是:

mainApp.controller("deleteToDoController", function($scope,$http) {
$scope.toDoList = {};
$scope.getToDo = function(){
    var url = "http://localhost:8080/webservice-4.0/rest/todo/"+$scope.status;
    $http.get(url)
    .then(function(response) {
        $scope.toDoList = angular.fromJson(response.data);
    });
}
$scope.deleteToDo = function(){
    var url = "http://localhost:8080/webservice-4.0/rest/todo/delete/"+$scope.deleteId;
    $http.get(url)
    .then(function(response) {
        $scope.toDoList = angular.fromJson(response.data);
    });
}

});

赞赏!!!!

2 个答案:

答案 0 :(得分:2)

你的$ scope.deleteId将是不可取的。您的函数应该有一个参数 deleteId ,将函数更改为

$scope.deleteToDo = function(deletId){
    var url = "http://localhost:8080/webservice-4.0/rest/todo/delete/"+ deleteId;
    $http.get(url)
    .then(function(response) {
        $scope.toDoList = angular.fromJson(response.data);
    });
}

确保你也传递了Id in the html,

<input type="button" ng-click="deleteToDo(toDo.id)">Delete</button><br>

修改

由于您的删除按钮位于 ng-repeat 之外,您应该使用带有 ng-model 的点运算符作为 deleteId < / p>

$scope 变量定义为

$ scope.deleteItem = {};

和你的HTML as,

<div ng-repeat = "toDo in toDoList">
  <input type="radio" ng-model="deleteItem.deleteId" value="{{toDo.id}}"/>
</div>
<input type="button" ng-click="deleteToDo()">Delete</button><br>

和您的控制器为,

$scope.deleteToDo = function(){
    var url = "http://localhost:8080/webservice-4.0/rest/todo/delete/"+$scope.deleteItem.deleteId;
    $http.get(url)
    .then(function(response) {
        $scope.toDoList = angular.fromJson(response.data);
    });
}

答案 1 :(得分:2)

deletedId子范围内创建ng-repeat以来。你scope以外的ng-repeat变量不会像{1}}

中那样传递它

你必须做以下事。

  1. 在定义模型时使用ng-click,这样原型继承将有助于将变量的引用传递给子范围。

  2. 使用Dot rule模式。

  3. <强> HTML

    ControllerAs

    使用点规则

    <form ng-submit="getToDo()">
        ToDo Status:
        <input type="radio" ng-model="status" value="completed"/>Completed<input type="radio" ng-model="status" value="pending"/>Not Completed
        <input type="submit" value="View To Do"/><br>
        <div ng-repeat = "toDo in toDoList">
            <input type="radio" ng-model="tobeDeleted.deleteId" 
               value="{{toDo.id}}"/>
            Task : {{toDo.name}}<br>
        </div>
        <input type="button" ng-click="deleteToDo()">Delete</button><br>
    </form>