2016-01-26 79 views
0

我是AngularJS的新手,我對它有點困惑。我必須做一個帶有幾個配置選項的頁面,我想要保存,當我再次打開頁面時,必須使用保存的值填充輸入。我有一個複選框,當它的值爲false時,所有其他字段都被禁用。我做了保存並且工作正常,但是當我在此之後加載頁面時,輸入被禁用且爲空。我在ng-init上執行GET請求,並且比設置每個輸入的範圍變量。它們保持禁用狀態,即使響應將此複選框的ng模型設置爲true時,複選框仍未選中。 ng-checked是相同的,不可見。當我檢查複選框時,神奇的值是正確的值。這是html。窗體不是從角度的休息響應填充

<div ng-controller="archivingController" ng-init="getArchivingOptions()"> 
<form name="archivingForm" ng-submit="saveConfiguration()" novalidate> 
    <div id="archivingFormEnable"> 
     <input type="checkbox" class="checkbox" ng-model="configurations.enableArchiving"/> 
     <label id="archivingLabelEnable">Enable Archiving</label> 
    </div> 
    <fieldset> 
     <legend>Archiving Settings</legend> 
     <div id="globalArchivingDiv"> 
      <label id="globalArchivingLabel" style="width: 240px">Global archiving:</label> 
      <select ng-init="configurations.globalArchiving='disabled'" ng-model="configurations.globalArchiving" ng-disabled="!configurations.enableArchiving"> 
       <option value="disabled">Disabled</option> 
       <option value="enabled">Enabled</option> 
      </select> 
     </div> 
     <div id="archiveFolderDiv"> 
      <label id="archiveFolderLabel">Archive folder:</label> 
      <input type="text" ng-disabled="!configurations.enableFileArchiving" ng-model="configurations.archiveFolder" required/> 
      <span ng-show="fileArchivingForm.archiveFolder.$invalid && configurations.enableFileArchiving">Required.</span> 
     </div> 
    </fieldset> 
    <button id="save" ng-disabled="fileArchivingForm.$invalid && configurations.enableFileArchiving">Save</button> 
</form> 
</div> 

和控制器。

mainApp.controller('archivingController', ['$scope', function($scope){ 
$scope.getArchivingOptions = function(){ 
    $.ajax({ 
     url: someURL, 
     type: 'GET', 
     dataType : 'json', 
     cache: false, 
     success : function(data) { 
      $scope.configurations = data.configurations; 
     } 
    }); 
} 

$scope.saveConfiguration = function(){ 
    $.ajax({ 
     type : 'POST', 
     contentType : 'application/json', 
     url : someURL, 
     dataType : 'json', 
     data : JSON.stringify($scope.configurations), 
     complete : function(jqXHR, textStatus) { 
      //some msg 
     } 
    });  
} 
}]); 

其實我相信,所有的人都設定,因爲當我打電話 console.log($scope.configurations.archiveFolder);所輸出的值是從響應一個正確的。問題是,直到我點擊複選框,它纔可見。我不知道該怎麼辦。我很樂意提供建議。先謝謝你。

+0

爲什麼您使用$阿賈克斯,而不是$ HTTP? –

+0

與他過去的http有一些問題,但我也會嘗試使用http。謝謝。 –

+0

它與$ http協同工作。它的問題是使用IE9/10時,但由於MS放棄支持,我會。現在問題是隻有複選框沒有更新。該值是正確的,但顯然沒有被檢查。箱子裏沒有支票。 –

回答

0

如果你使用jQuery的$阿賈克斯,而不是角的$ HTTP,你需要用的回調在$範圍$應用:

"success": function(data) { 
    $scope.$apply(function() { 
     //your code here 
    }); 
} 
+0

我試過$ http,它的工作原理。我們有它和IE9/10的問題,但現在,因爲MS放棄了他們的支持,我可以使用$ http。現在所有的輸入都被填充,除了一個,複選框。當我加載頁面時,我被取消選中,但其他輸入未被禁用,它們是正確的。謝謝。 –