我在页面上有这个选择:
<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调用时什么都不做?
答案 0 :(得分:0)
也许您不共享完整的控制器代码,但为什么使用self
上下文访问selectdData
对象中的数据?
您可以使用直接调用selectData
作为控制器的顶层声明,并且只需使用selectedData.currentUser
即可访问闭包。
alert(self.addForm.title + " CU:" + selectData.currentUser);