Android Phonegap应用程序+;AngularJS:在android DatePicker上使用选定日期更新$scope
我为我的phonegap应用程序创建了一个插件,它调用一个本地android“DatePicker”控件。DatePicker的调用方式如下: 视图上有一个复选框。当用户选中复选框时,我调用日期选择器。选择日期并按确认后,将触发一个事件,我将选择日期。问题是,在这个事件中,我没有$scope。即使我尝试设置它,但它不会得到更新。我认为发生这种情况是因为触发事件时,$scope不在上下文中 我需要有用户选择进行验证的日期,并允许他保存更改。这是我的视图和控制器:Android Phonegap应用程序+;AngularJS:在android DatePicker上使用选定日期更新$scope,angularjs,cordova,angularjs-scope,Angularjs,Cordova,Angularjs Scope,我为我的phonegap应用程序创建了一个插件,它调用一个本地android“DatePicker”控件。DatePicker的调用方式如下: 视图上有一个复选框。当用户选中复选框时,我调用日期选择器。选择日期并按确认后,将触发一个事件,我将选择日期。问题是,在这个事件中,我没有$scope。即使我尝试设置它,但它不会得到更新。我认为发生这种情况是因为触发事件时,$scope不在上下文中 我需要有用户选择进行验证的日期,并允许他保存更改。这是我的视图和控制器: myappControllers.
myappControllers.controller('ItemDetailsController',
['$scope', '$routeParams', 'Notification', function ($scope, $routeParams, Notification) {
$scope.notification= Notification.getNotification($routeParams.Id);
$scope.resolved = false;
$scope.date = '';
//This event is fired when the user check's the checkbox
$scope.openCalendar = function(){
// defining options
var options = {
date: new Date(),
mode: 'date'
};
//This event is fired when the user has selected a date on the DatePicker
datePicker.show(options, function(date){
$scope.date = date //Does not get updated!
});
}
//Function for save button
$scope.save = function(){
if($scope.date){
//save the changes
}
}
}]);
视图(为了简化而缩短)
如何处理此问题?只需在datePicker.show方法中添加$scope.$apply()
datePicker.show(options, function(date){
$scope.date = date;
$scope.$apply();
});
Angular不知道该更改,因为它发生在“$scope”之外,$apply()将启动一个摘要循环,以便应用更改 有趣的事。昨天我尝试在show函数中调用$apply,但总是出现未定义的错误。不管怎样,现在工作了。非常感谢。您好@jpgassi,看起来我们使用的是同一个插件:)-,但我无法在应用程序中调用日历-它抱怨
show
操作未定义。我已经通过运行phonegap本地插件add安装了它https://github.com/VitaliiBlagodir/cordova-plugin-datepicker
。在构建phonegap应用程序之前,我还有什么需要做的吗?有没有办法在浏览器中测试这一点?(当我在构建eclipse之前在chrome中进行开发时)您好。我最终从零开始创建了一个专门针对我需要的插件。我特别不喜欢通过命令行添加插件。由于PhoneGap3.0有点坏,我有几个问题,所以我更喜欢手动添加它们。我会检查插件的js文件定义,看看show方法是如何创建的。还要检查CLI是否在res/xml/config.xml文件中添加了插件定义。如果一切看起来都很好,但仍然无法正常工作,请尝试删除插件并手动添加。检查以下链接:
datePicker.show(options, function(date){
$scope.date = date;
$scope.$apply();
});