2015-07-10 66 views
0

當頁面加載時,下拉列表與某些值綁定(比如1,2 ... 7) 基於一個條件,我想設置它的選定值。在承諾中設置時,它不起作用。如何解決這個問題。保留在promise中獲得的值 - angular

HTML:

<div ng-app="app" ng-controller="Ctrl"> 
<select id="ddlSets" data-ng-model="SetId"> 
    <option value="0">-- Select Set --</option> 
    <option data-ng-repeat="item in Sets" value="{{item.Id}}">{{item.Code}}</option> 
</select> 
</div> 

ctrl.js:

var app = angular.module("app",[]); 
app.controller("ctrl",["$scope","Factory",function($scope,Factory){ 


    var init = function(){ 
     //$scope.Sets = (code here to bind data to the dropdown) 

     var promise = Factory.GetSetId(); 
     promise.then(function (success) { 
      if (success.data == 5) { 
      $scope.SetId = 5; //value isn't set. It remains 0. 
      } 
     }, 
     function (error) { 
     console.log(error); 
     }); 
    } 
    //it works if set here - $scope.SetId = 7; 

      init(); 
    }]); 

factory.js:

app.factory("Factory", ["$http",function ($http) { 
var factory = {}; 
factory.GetSetId = function() { 
     return $http({ 
      url: "http://localhost:12345.asmx/GetSetId", 
      method: "GET" 
     }).success(function (data, status) { 
     }).error(function (data, status) { 
     });   
    } 
return factory; 
}]); 
+0

你可以做一個plunker顯示這種行爲? –

+0

不知道如何做到承諾/ $ http。如果我只是用代碼 – Qwerty

+0

創建一個,如果它實際上沒有證明問題,那麼它會沒問題,那麼沒有多大意義!如果你被困住了,也許一個單獨的SO問題可以幫助你解決問題。 –

回答

2

更改您的HTML以下。在html中使用沒有$ scope的範圍變量。

<div ng-app="app" ng-controller="Ctrl"> 
<select id="ddlSets" data-ng-model="SetId"> 
    <option value="0">-- Select Set --</option> 
    <option data-ng-repeat="item in Sets" ng-value="{{item.Id}}">{{item.Code}}</option> 
</select> 
</div> 
+0

是的。另外值得注意的是,默認選項不應該有一個值'<選項值=「」> - 選擇設置 -' – kiswa

+0

對不起,這是一個錯字。問題仍然存在。爲什麼應該默認沒有價值。我也有基於0值的任務。 – Qwerty

+0

使用ng值而不是值。編輯我的答案。 – dhavalcengg

1

你能嘗試將值賦給像一個對象的屬性:

控制器:

$scope.model = {}; 
var promise = Factory.GetSetId(); 
promise.then(function (success) { 
    if (success.data == 5) { 
    $scope.model.SetId = 5; //update 
    } 
}, 
function (error) { 
console.log(error); 
}); 

模板:

<select id="ddlSets" data-ng-model="model.SetId"> 
+0

剛剛嘗試。不工作。 – Qwerty

+0

你有沒有提醒這次的價值? –

+0

是警報彈出該值,但未將其設置爲下拉菜單 – Qwerty

1

它看起來像$scope.SetId5 ,一個數字,但選項元素的值爲"5",從{{item.Id}}評估,這是一個字符串,因爲{{ }}的插值總是給出一個字符串。 (不是說"5",實際上並沒有在字符串中包含引號,但我只是在這裏包含它們來試圖顯示數據類型)。

所以你有2個選項。

  1. 使用ngOptions來生成options元素。像下面的東西應該工作。

    <select id="ddlSets" data-ng-model="SetId" ng-options="item.Id as item.Code for item in Sets"> 
        <option value="0">-- Select Set --</option> 
    </select> 
    
  2. 只能在範圍內使用字符串ID。在將其設置在範圍之前,將其轉換爲字符串是一種快速且骯髒的方法。

    if (success.data == 5) { 
        $scope.SetId = 5 + ''; 
    } 
    
+0

我不認爲多數民衆贊成在問題,原因,當我說'$ scope.SetId = 7;',承諾之外,它的作品。 – Qwerty

+0

@ Qwerty Ah:我錯過了! –

+0

它的'好。這不是我第一次遇到這個問題。我剛剛離開它。我們如何將一個值賦給承諾中的一個變量,並在那之後保留它們。似乎很難。應該這樣,工廠代碼被寫入更改? – Qwerty