2016-12-29 6 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コントローラー:私ができるコントローラのaddProduct機能で

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); 
     }); 

    }; 

}]); 

」 selectData.currentUserを取得します。これはgetProducts関数(この関数はselectData.currentUserを使用してデータベースから項目をロードし、実際には動作しますが、私は見ることができます)では動作しますが、addProductでは機能しません。

フォームの送信機能です。だから、私が "送信"ボタンをクリックすると、何もしません。しかし、もし私が "CU:" + self.selectData.currentUserをアラート機能で削除すると、それは動作し、私のアラートを表示します(もちろん、サーバーへの正しいポストリクエストを送信しません)。

どうすればよいですか?内部の警告機能でselectData.currentUserを使用してng-submitが何もしないのはなぜですか?

+0

プラッカーが役に立ちます – HebleV

答えて

0

selectdDataオブジェクトのデータにアクセスするには、フルコントローラコードを共有するのはなぜですか、なぜselfコンテキストを使用するのでしょうか?

selectDataを直接呼び出すことができます。これはコントローラの上部に宣言されているため、クロージャにはselectedData.currentUserを使用してアクセスできます。

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

私はそうしました。今それは動作し、警告機能はOKですが、selectData.currentUser = "テスト"、それはデフォルト値です。他の関数はまだselectData.currentUserのng-modelの実際の値を持っています – MarkPolubinskas

+0

'selectedData'をスコープに移動します。 'var selecteData = ...'の代わりに 'self.selectedData ='を使います。そしてこれは古い構文 'self.selectData.currentUser'を使って動作します – VadimB

+0

私のselectDataは' self.selectData = 'です。これはself.selectData.currentUser構文で動作しますが、その値はデフォルト値( "test")です。その値は選択されていません – MarkPolubinskas

関連する問題