我想將動態變量傳遞到顯示時間選擇器的指令(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