如何通过知道角度js中的路径来获取对模型属性的引用?

时间:2013-08-06 06:21:29

标签: angularjs

我对角度js很新,情况是这样的:我有javascript datepicker,输入弹出日期选择,输入绑定到角度模型。

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

我找到了sample with color picker,它几​​乎适合,除了事实,我不想硬编码要更新的属性。

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

2 个答案:

答案 0 :(得分:1)

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

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

更多关于AngularJS docs $apply以及我认为来自Jim Hoskins的excellent article的更多信息。

答案 1 :(得分:0)

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

无论如何,我已经查看了角度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);
    });