Android Phonegap应用程序+;AngularJS:在android DatePicker上使用选定日期更新$scope

Android Phonegap应用程序+;AngularJS:在android DatePicker上使用选定日期更新$scope,angularjs,cordova,angularjs-scope,Angularjs,Cordova,Angularjs Scope,我为我的phonegap应用程序创建了一个插件,它调用一个本地android“DatePicker”控件。DatePicker的调用方式如下: 视图上有一个复选框。当用户选中复选框时,我调用日期选择器。选择日期并按确认后,将触发一个事件,我将选择日期。问题是,在这个事件中,我没有$scope。即使我尝试设置它,但它不会得到更新。我认为发生这种情况是因为触发事件时,$scope不在上下文中 我需要有用户选择进行验证的日期,并允许他保存更改。这是我的视图和控制器: myappControllers.

我为我的phonegap应用程序创建了一个插件,它调用一个本地android“DatePicker”控件。DatePicker的调用方式如下:

视图上有一个复选框。当用户选中复选框时,我调用日期选择器。选择日期并按确认后,将触发一个事件,我将选择日期。问题是,在这个事件中,我没有$scope。即使我尝试设置它,但它不会得到更新。我认为发生这种情况是因为触发事件时,$scope不在上下文中

我需要有用户选择进行验证的日期,并允许他保存更改。这是我的视图和控制器:

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();

});