AngularJS在控制器功能中选择输入ng-model访问

时间:2016-12-29 14:40:19

标签: javascript html angularjs

我在页面上有这个选择:

<select multiple id="userId" class="form-control" ng-model="ctrl.selectData.currentUser"
                ng-options="user.id as user.firstName + ' ' + user.lastName for user in ctrl.users"
                ng-change="ctrl.getProducts()">
        </select>

我有这个AngularJS控制器:

app.controller("MainController", ["$http", "$routeParams", function($http, $routeParams) {
    var self = this;

    var selectData = {
        currentUser: "test"
    }

    self.getUsers = function() {
        $http.get("users/all").then(function(response) {
            self.users = response.data.items;
        })
    };

    self.getProducts = function() {
        $http.get("products/all?userId=" + self.selectData.currentUser).then(function(response) {
            self.products = {"count": response.data.count, "items": response.data.items};
        });
        self.userChoosed = true;
        alert(self.selectData.currentUser);
    };

    self.addProduct = function() {
        alert(self.addForm.title + " CU:" + self.selectData.currentUser);

        $http({
            method: "POST",
            url: "products/add",
            data:"title=" + self.addForm.title + "&description=" + self.addForm.description + "&price=" + self.addForm.price + "&ownerId=" + self.selectData.currentUser
        }).then(function successCallback(response) {
            alert("success");
        }, function errorCallback(response) {
            alert("error" + response.data);
        });

    };

}]);

在控制器的addProduct函数中,我无法获得selectData.currentUser。它在getProducts函数中工作正常(这个函数使用selectData.currentUser从数据库加载项,它确实有效,我可以看到它),但它不在addProduct中。

它是表单提交的功能。所以,当我点击我的“提交”按钮时,它什么也没做。但是如果我在alert函数中删除“CU:”+ self.selectData.currentUser,它会工作并显示我的警报(但当然它不会向服务器发送正确的帖子请求)。

我该怎么办?为什么ng-submit在我用alert函数里面的selectData.currentUser调用时什么都不做?

1 个答案:

答案 0 :(得分:0)

也许您不共享完整的控制器代码,但为什么使用self上下文访问selectdData对象中的数据?

您可以使用直接调用selectData作为控制器的顶层声明,并且只需使用selectedData.currentUser即可访问闭包。

alert(self.addForm.title + " CU:" + selectData.currentUser);