我想将动态变量传递到显示时间选择器的指令(pickadate.js:http://amsul.ca/pickadate.js/time/)。但是,我正在努力如何让选项进入指令。我在互联网上搜索,但看到了很多方法,并且对于如何以最佳方式构建它而感到困惑,因为它不起作用。这是我的当前代码:AngularJS指令的动态选项
指令:
// Pick a date directive used as pick-a-time on HTML element
appDirectives.directive('pickATime', function() {
return {
// Restrict it to be an attribute in this case
restrict: 'A',
// responsible for registering DOM listeners as well as updating the DOM
link: function(scope, element, attrs) {
element.pickatime(scope.$eval(attrs.pickATime));
},
scope: {
timeOptions: '=options'
},
templateUrl: '../Templates/timeoptions.html'
};
});
指令模板:
Min: {{timeOptions.startTime}} Max: {{customerInfo.endTime}}
HTML:
<input type="text" placeholder="Start Time" id="timestart" pick-a-time options="timeRange" data-ng-model="itemtimestart" class="form-control" autocomplete="off">
控制器以在动态传递值(存储在REST)
// Query settings for variables to be used later in function
appSettings.query(function(settings) {
// Data is within an object of "value", so this pushes the server side array into a variable
var setting = settings.value;
// Foreach result, where setting is equal to active get the apporpriate variables
angular.forEach(setting, function(settingvalue, settingkey) {
if (settingvalue.Title == 'Active') {
// Get work and non work durations as variables
workDuration = settingvalue.Work_x0020_Day_x0020_Hours_x0020;
nonWorkDuration = settingvalue.Non_x0020_Work_x0020_Day_x0020_H;
// Get $scope variables to control time picker range
var startHour = settingvalue.Work_x0020_Day_x0020_Start_x0020.split(":")[0];
var startMinute = settingvalue.Work_x0020_Day_x0020_Start_x0020.split(":")[1];
var startTime = '[' + startHour + ',' + startMinute + ']';
var endHour = settingvalue.Work_x0020_Day_x0020_End_x0020_M.split(":")[0];
var endMinute = settingvalue.Work_x0020_Day_x0020_End_x0020_M.split(":")[1];
var endTime = '[' + endHour + ',' + endMinute + ']';
$scope.timeRange = {min: startTime, max: endTime};
}
})
});
非动态方法(工作)上的输入如下:
<input type="text" placeholder="End Time" id="timeend" pick-a-time="{min: [0,0], max: [23,30]}" data-ng-model="itemtimeend"class="form-control" autocomplete="off">
更新:与戴维工作时,我已经调整到以下内容。它正确地记录了TIMERANGE,而是给出了一个未定义的timeOptions在指令
TIMERANGE登录:
time start is [8,30]time end is [17,0]
timeOption日志:
time options log undefined
指令(未定义的记录timeOptions):
appDirectives.directive('pickATime', function() {
return {
// Restrict it to be an attribute in this case
restrict: 'A',
// responsible for registering DOM listeners as well as updating the DOM
link: function(scope, element, attrs) {
element.pickatime(scope.pickATime);
console.log("time options log" + scope.timeOptions);
},
scope: {
timeOptions: '='
},
templateUrl: '../Templates/timeoptions.html'
};
});
模板:
min: {{timeOptions.min}}, max: {{timeOptions.max}}
控制器(注销正确):
// Get $scope variables to control time picker range
var startHour = settingvalue.Work_x0020_Day_x0020_Start_x0020.split(":")[0];
var startMinute = settingvalue.Work_x0020_Day_x0020_Start_x0020.split(":")[1];
var startTime = '[' + startHour + ',' + startMinute + ']';
var endHour = settingvalue.Work_x0020_Day_x0020_End_x0020_M.split(":")[0];
var endMinute = settingvalue.Work_x0020_Day_x0020_End_x0020_M.split(":")[1];
var endTime = '[' + endHour + ',' + endMinute + ']';
$scope.timeRange = {
min: startTime,
max: endTime
};
HTML:
<input type="text" placeholder="Start Time" id="timestart" pick-a-time timeOptions="timeRange" data-ng-model="itemtimestart" class="form-control" autocomplete="off">
更新 - 选择器工作......但现在形式不提交按照该帖子时间数据: TimePicker directive won't submit time (undefined) **
非常感谢@ dave-alperovich和@ joe-enzminger for tire较少的帮助和很好的答案。
控制器:
// Get $scope variables to control time picker range
var startHour = settingvalue.Work_x0020_Day_x0020_Start_x0020.split(":")[0];
var startMinute = settingvalue.Work_x0020_Day_x0020_Start_x0020.split(":")[1];
var endHour = settingvalue.Work_x0020_Day_x0020_End_x0020_M.split(":")[0];
var endMinute = settingvalue.Work_x0020_Day_x0020_End_x0020_M.split(":")[1];
$scope.timeRange = {
min: [startHour,startMinute],
max: [endHour,endMinute]
};
指令:
appDirectives.directive('pickATime', function() {
return {
// Restrict it to be an attribute in this case
restrict: 'A',
// responsible for registering DOM listeners as well as updating the DOM
link: function(scope, element, attrs) {
element.pickatime(scope.options());
},
scope: {
options: '&pickATime'
},
};
});
用法:
<input ng-if="timeRange" type="text" placeholder="Start Time" id="timestart" pick-a-time="timeRange" data-ng-model="itemtimestart" class="form-control" autocomplete="off">
'element.pickatime(scope.options())'我在想scope.options是一个对象而不是函数。 – Scottux 2015-04-16 13:19:48
它在DOM中返回这个值,并且不会过滤时间。 aria-haspopup =“true”aria-readonly =“true”aria-readonly =“false” “false”aria-owns =“timestart_root”type =“text”readonly =“”placeholder =“开始时间”data-ng-model =“itemtimestart”autocomplete =“off”pick-a-time =“timeRange”> min :,max: – Kode 2015-04-16 13:34:44
我的模板目前是:min:{{options.min}},max:{{options.max}}是否正确? – Kode 2015-04-16 13:38:20