2016-06-22 79 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