Angularjs 如何通过了解模型属性来获取对模型属性的引用';角js中的s路径?
我对angular js非常陌生,情况是:我有javascript datepicker,它是用弹出窗口输入的,用于选择日期,输入绑定到angular模型 据我所知,问题是输入值是从javascript更改的,而不是从ui更改的,所以angular js不知道,该值已更改,所以它不会更新模型值 我发现,除了我不希望硬编码要更新的属性之外,它几乎是合适的 我可以想象以下工作流程:Angularjs 如何通过了解模型属性来获取对模型属性的引用';角js中的s路径?,angularjs,Angularjs,我对angular js非常陌生,情况是:我有javascript datepicker,它是用弹出窗口输入的,用于选择日期,输入绑定到angular模型 据我所知,问题是输入值是从javascript更改的,而不是从ui更改的,所以angular js不知道,该值已更改,所以它不会更新模型值 我发现,除了我不希望硬编码要更新的属性之外,它几乎是合适的 我可以想象以下工作流程: 1.订阅所有日期采集器的onchangedevent 2.触发该事件时,从输入读取模型路径(例如,读取ng模型属性值,
1.订阅所有日期采集器的
onchanged
event2.触发该事件时,从输入读取模型路径(例如,读取ng模型属性值,可能有更好的方法吗?
3.并使用该路径更新模型中的值。我可以使用点分割路径,并使用这些部分访问属性,但我不知怎么想,这应该已经在AngularJS中实现了(至少在内部例程中)。您需要
$scope.$apply
来通知AngularJS模型更改。我不知道你真正使用的是哪种日期选择器,但我可以看起来像:
$($element).datepicker({
.
.
.
}).on('changeDate', function(event){
$scope.$apply(function(){
$scope.date = event.date;
});
});
更多关于
$apply
的信息,我认为是Jim Hoskins提供的。您需要$scope.$apply
通知AngularJS有关模型更改的信息。我不知道你真正使用的是哪种日期选择器,但我可以看起来像:
$($element).datepicker({
.
.
.
}).on('changeDate', function(event){
$scope.$apply(function(){
$scope.date = event.date;
});
});
更多关于Jim Hoskins的和我认为的一篇文章中的
$apply
。@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);
});
@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);
});
答案中的硬编码在哪里?前提是它允许将任何属性分配给颜色选择器指令。正如我在问题中提到的,我不希望在事件处理程序中硬编码确切的属性,我在页面中有多个日期选择器绑定到模型的不同部分,不希望显式地为每个事件编写事件处理。不,指令中根本没有硬编码。指令作用域中定义的color属性从html中的指令调用获取其初始值。因此,如果您必须在多个位置使用此指令,您将执行
color picker=“myColor1”。。。。color picker=“myColor2”
等等。@Chandermani-哦,我现在明白了,我仍然需要习惯这个事实,这个范围取决于上下文:)如果答案允许将任何属性分配给color picker指令,那么硬编码在哪里呢?正如我在问题中提到的,我不希望在事件处理程序中硬编码确切的属性,我在页面中有多个日期选择器绑定到模型的不同部分,不希望显式地为每个部分编写事件处理。不,指令中根本没有硬编码。指令作用域中定义的color属性从html中的指令调用获取其初始值。因此,如果您必须在多个位置使用此指令,您将执行color picker=“myColor1”。。。。color picker=“myColor2”
等等。@Chandermani-哦,我现在明白了,仍然必须习惯这个事实,范围取决于上下文:)我不想明确地告诉你,我的模型有属性日期
。如果我使用$('.date').datepicker()
附加datepicker,并且具有类似project.creationDate
,project.currentMilestone.deadlineDate
,这意味着页面中有许多日期选择器,所有这些都绑定到模型的不同部分。我建议为您的日期选择器创建一个指令,该指令处理对“changeDate”事件的事件订阅,并允许您传入希望以拾取日期的结果为目标的模型属性。例如您将需要使用上面@tschiela推荐的$scope.$apply(…)返回AngularJS$scope。我不想明确地告诉您,我的模型具有属性date
。如果我使用$('.date').datepicker()
附加datepicker,并且具有类似project.creationDate
,project.currentMilestone.deadlineDate
,这意味着页面中有许多日期选择器,所有这些都绑定到模型的不同部分。我建议为您的日期选择器创建一个指令,该指令处理对“changeDate”事件的事件订阅,并允许您传入希望以拾取日期的结果为目标的模型属性。例如您需要使用上面@tschiela推荐的$scope.$apply(…)才能返回AngularJS$scope。