2016-06-22 173 views
0

我一直在這個問題上停留了一段時間。我很感謝你的幫助。我附上了一個笨蛋。 Plunker LinkAngularJS和JSON對象

(function() { 
'use strict'; 

angular 
    .module('scheduling') 
    .controller('ScheduleCtrl', ['$scope', '$rootScope', '$log', '$filter', function ($scope, $rootScope, $log, $filter) { 
     $scope.selectedDay = function() { 
      $rootScope.day = Object.keys($scope.day).map(key => $scope.day[key]); 
      $rootScope.day = $scope.day; 
      $rootScope.schedule.weekdays.day['@'].day = $rootScope.day; 
      console.log($rootScope.day);     
     }     
    }]); 
})(); 

目的:我需要能夠選擇一天或數天,並有一個價值得到了$ rootScope.schedule對象保存到$ rootScope.day。該值需要保存爲一天:0,日:1,日:2等我最初的問題是,該值被存儲爲太陽:0,星期一:1,星期二:2等我能找到一個刪除日期名稱(sun,mon,tue)的方法,但現在它將值存儲爲0:0,1:1,2:2等。

您可以查看Plunker上的完整代碼,並讓我知道如何在數值前面獲得一天(日:1或日:1,2,3)?

注意:我已經嘗試使用checklist-model和ngRepeat methodolgy,但那也不起作用。

感謝您的幫助。

+0

你想你的輸出是一個對象或數組值? – Claies

+0

我討厭問,但你似乎有一個非常複雜的設置與你的日子。你真的在追求什麼? – KreepN

+0

KreepN - 對於複雜性抱歉 - 我對編碼相當陌生。我正在創建一個調度應用程序。用戶可以選擇一天來完成工作。我需要將此值傳遞給第三方應用程序。 JSON對象被轉換爲XML。第三方不能識別$ rootScope.day值,因爲輸出是sun:0而不是day:0。 – Heather

回答

0

爲日期創建一個數組,並將用戶選擇的值保存爲狀態的字段。

日期列表:

$scope.listDates = [ 
    {day:"Sunday", value: "7",status: 0}, 
    {day:"Mon", value: "1",status: 0}, 
    {day:"Tues", value: "2",status: 0}, 
    {day:"Wed", value: "3",status: 0}, 
    {day:"Thur", value: "4",status: 0}, 
    {day:"Fri", value: "5",status: 0}, 
    {day:"Sat", value: "6",status: 0} 
] 

使用NG-重複顯示列表日:

<li class="col-md-3" ng-repeat="date in listDates"> 
      <input type="checkbox" id="{{'day'+ date.status}}" ng-true-value="{{date.value}}" ng-model="date.status" ng-change="dayChanged()"/> 
      <label class="ui-checkbox" for="{{'day'+ date.status}}">{{date.day}}</label> 
    </li> 

我做了一個plunkr here天選擇顯示[1,2 ...]

+0

謝謝,武。那麼你是否將$ scope.dayPicked傳遞給$ rootScope.schedule對象? – Heather

+0

你可以改名爲daySelected來安排時間,如果可以的話,不要使用/避免使用rootcope變量。此外,我使用ng-repeat來使代碼變得乾淨和易於閱讀。 –

+0

謝謝。但是我的最終結果輸出在$ rootScope.schedule中仍然沒有正確格式化。其表示爲: 天:[數組] 0:1 1:4 我需要它是: 天:1 天:4 – Heather

1

價值被保存到day.sun的原因是你有你的ng模型,例如:ng-model =「day.sun」。這意味着它綁定到日物體中的太陽屬性。

重新審視您的應用程序可能是一個不錯的主意,因爲它目前似乎並不複雜。下面的片段是我如何爲每一天做一組複選框的一個例子。

我推薦使用服務而不是rootcope。

(function() { 
 
    'use strict'; 
 
    angular.module('test', []); 
 
    angular 
 
    .module('test') 
 
    .controller('MainCtrl', MainCtrl); 
 

 
    function MainCtrl() { 
 
    var vm = this; 
 

 
    vm.getSelectedDays = function() { 
 
     var selectedDays = []; 
 
     angular.forEach(vm.days, function(value, idx) { 
 
      if (value.isEnabled) { 
 
      selectedDays.push(idx + 1); 
 
      } 
 
     }); 
 
     return selectedDays; 
 
    }; 
 
     
 
    vm.days = [{ 
 
     name: 'Monday', 
 
     isEnabled: false 
 
    }, { 
 
     name: 'Tuesday', 
 
     isEnabled: false 
 
    }, { 
 
     name: 'Wednesday', 
 
     isEnabled: false 
 
    }, { 
 
     name: 'Thursday', 
 
     isEnabled: false 
 
    }, { 
 
     name: 'Friday', 
 
     isEnabled: false 
 
    }, { 
 
     name: 'Saturday', 
 
     isEnabled: false 
 
    }, { 
 
     name: 'Sunday', 
 
     isEnabled: false 
 
    }]; 
 
    } 
 
})();
label { 
 
    display: block; 
 
}
<!doctype html> 
 
<html ng-app="test" ng-cloak> 
 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
</head> 
 
<body> 
 
    <div ng:controller="MainCtrl as vm"> 
 
    <label ng-repeat="day in vm.days track by $index"> 
 
     <input type="checkbox" ng-model="vm.days[$index].isEnabled">{{day.name}} 
 
    </label> 
 
    <p>days: {{vm.getSelectedDays()}}</p> 
 
    </div> 
 
</body> 
 

 
</html>

+0

感謝您的幫助。我必須使用模型 - 否則,如果我只是使用一天作爲模型(而不是day.sun),我只能一次選擇一個複選框。這就是爲什麼我使用Object.key映射來拉取值。 我會花一些時間研究服務vs $ rootcope。 – Heather