AngularJS:为什么ng-model值不在范围变量中更新

时间:2015-03-12 06:12:28

标签: jquery angularjs angularjs-directive angularjs-scope

我正在使用jquery timepicker插件及其angular指令。当我从javascript重置范围值时,那么同时范围值不会更新。

我曾尝试对timepicker指令文件进行更改但未成功。

示例: - 选择开始时间1:00 AM然后结束时间自动设置为1:15 AM,这是从JS文件中的watch功能更新的。现在单击“重置”,将删除值或输入字段为空。现在再次选择同一时间凌晨1:00结束时间未自动填充,并且重置不起作用。

但是如果我改变了之前选择的时间以外的时间,那就行了。

问题: - 输入字段中的重置值看起来已填充但未在角度范围或模型上更新。但是,如果我通过document.getElementById()函数检查该值,那么它将显示该输入字段内的值。那么为什么这些值不会在角度范围内更新。

要求: - 我想在用户点击重置后清空字段。并且当用户第二次选择"同一时间" 时,应该在角度范围和模型中更新该值。

代码: -

 var app = angular.module('timePicker', ['ui.timepicker']);

app.controller('DemoCtrl',function($scope){
//$scope.startTime = new Date();
$scope.$watch('startTime', function (newValues, oldValues, scope) 
    {

        if( ($scope.startTime != undefined) &&  ($scope.startTime != null) && ($scope.startTime != '') )
            {
                $scope.endTime =  new Date($scope.startTime.getTime() + (15*60*1000));

                console.log($scope.startTime);
                console.log($scope.endTime);
            }   

    });

$scope.$watch('scope', function (newValues, oldValues, scope) 
    {
        console.log("Nothing here");
    });

$scope.resetTime = function()
{
  $scope.startTime = undefined;
  $scope.endTime = undefined;

}


});

我的Plnker: - Plnker

使用的资源: -

https://github.com/jonthornton/jquery-timepicker其角度指令位于https://github.com/Recras/angular-jquery-timepicker

2 个答案:

答案 0 :(得分:3)

问题

您无法使用$scope.$watch来处理此情况,因为只要$scope.$watch值发生更改,$scope.startTime就会调用,如果您选择$scope.startTime值是之前的值,然后这个下面的代码没有调用。这就是你遇到这个问题的原因

if( ($scope.startTime !== undefined) &&  ($scope.startTime !== null) && ($scope.startTime !== '') )
                {
                    $scope.endTime =  new Date($scope.startTime.getTime() + (15*60*1000));

                    console.log($scope.startTime);
                    console.log($scope.endTime);
                }   

评分

这个问题只发生在您之前的价值中。一旦您更改了任何其他值,那么它就能正常工作。

解决方案

您需要在第一个文字字段中更改为ng-blur而不是$scope.$watch

修正了演示

我已使用ng-blur解决了您的问题。请参阅此 Plunker

我的演示版也有重置功能 :)祝你好运

答案 1 :(得分:0)

我使用此代码重置

解决了这个问题
angular.element('#elementId').timepicker('setTime', null);

使用此代码,模型值也会使用之前的值更新。