我对角度js很新,情况是这样的:我有javascript datepicker,输入弹出日期选择,输入绑定到角度模型。
我理解的问题是输入值是从javascript而不是从ui更改的,因此angular js不知道,该值已更改,因此它不会更新模型值。
我找到了sample with color picker,它几乎适合,除了事实,我不想硬编码要更新的属性。
我想象以下工作流程:
1.订阅所有日期选择器'onchanged
事件
2.当该事件被触发时,从输入读取模型路径(例如读取ng-model属性值,可能有更好的方法吗?)
3.并使用该路径更新模型中的值。我可以使用这些部分使用点和访问属性来分割路径,但我想知道,这应该已经在角度js中实现(至少在内部例程中)。
答案 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);
});