1

我对 angular js 很陌生,情况是这样的:我有 javascript datepicker,它是用于日期选择的弹出窗口输入,输入绑定到 angular 模型。

据我了解,问题是输入值是从 javascript 更改的,而不是从 ui 更改的,因此 angular js 不知道该值已更改,因此它不会更新模型值。

我找到了带有颜色选择器的示例,它几乎适合,除了我不希望硬编码要更新的属性的事实。

我会想象以下工作流程:
1. 订阅所有日期选择器的onchanged事件
2. 当该事件被触发时,从输入中读取模型路径(例如读取 ng-model 属性值,可能有更好的方法吗?)
3. 并使用该路径更新模型中的值。我可以通过使用点来分割路径并使用这些部分访问属性,但我不知何故认为,这应该已经在 Angular js 中实现(至少在内部例程中)。

4

2 回答 2

1

您需要$scope.$apply将模型更改通知 AngularJS。我不知道你真正使用哪个日期选择器,但我可能看起来像:

$($element).datepicker({
  .
  .
  .
}).on('changeDate', function(event){
  $scope.$apply(function(){
    $scope.date = event.date;  
  });
});

更多关于$applyAngularJS文档和我认为来自 Jim Hoskins的优秀文章。

于 2013-08-06T06:38:50.703 回答
0

@Chandermani 正确地注意到,在我提到的颜色选择器示例中,您可以在 html 中指定要绑定的属性,因此它解决了我描述的情况。

无论如何,我查看了 angular js 的源代码并注意到,这$apply比我想象的要聪明得多,所以回答我的问题标题,你可以给 复杂的表达式$apply,比如赋值:

 $('.date').datepicker()
    .on('changeDate', function(e) {
       var input = $(e.target).find('input');
       var currentScope = angular.element(input).scope();

       // exp will evaluate to something model.createdDate = '2013-08-06'
       var exp = input.attr('ng-model') + '="' + input.val() + '"';
       currentScope.$apply(exp);
    });
于 2013-08-06T07:10:23.173 回答