2016-12-29 82 views
0

我有這個選擇我的網頁上:AngularJS選擇輸入NG-模型訪問

<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中。

它是一個表單提交功能。所以,當我點擊我的「提交」按鈕時,它什麼都不做。但是,如果我刪除「CU:」+ self.selectData.currentUser警報功能,它的工作原理和顯示我的警報(但它當然不會發送正確的發佈請求到服務器)。

我該怎麼辦?爲什麼ng-submit在alert函數裏面用selectData.currentUser調用時什麼也不做?

+0

一個plunker將是有益的 – HebleV

回答

0

也許你不會分享完整的控制器代碼,但爲什麼你使用self上下文來訪問你的數據在selectdData對象?

您可以直接調用selectData作爲您的控制器的頂層聲明,並且只需要使用selectedData.currentUser即可訪問關閉。

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

我這樣做。現在它工作並且警報功能正常,但是selectData.currentUser =「test」,它是默認值。 selectData中的另一個函數仍然具有ng模型的實際值。currentUser – MarkPolubinskas

+0

將'selectedData'移入作用域。而不是'var selecteData = ...'使用'self.selectedData ='。這將工作使用舊的語法'self.selectData.currentUser' – VadimB

+0

現在我的selectData是'self.selectData ='。它與self.selectData.currentUser語法一起工作,但它的值是默認值(「test」),它不是選擇值的ng模型 – MarkPolubinskas