Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何通过了解模型属性来获取对模型属性的引用';角js中的s路径?_Angularjs - Fatal编程技术网

Angularjs 如何通过了解模型属性来获取对模型属性的引用';角js中的s路径?

Angularjs 如何通过了解模型属性来获取对模型属性的引用';角js中的s路径?,angularjs,Angularjs,我对angular js非常陌生,情况是:我有javascript datepicker,它是用弹出窗口输入的,用于选择日期,输入绑定到angular模型 据我所知,问题是输入值是从javascript更改的,而不是从ui更改的,所以angular js不知道,该值已更改,所以它不会更新模型值 我发现,除了我不希望硬编码要更新的属性之外,它几乎是合适的 我可以想象以下工作流程: 1.订阅所有日期采集器的onchangedevent 2.触发该事件时,从输入读取模型路径(例如,读取ng模型属性值,

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

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

我发现,除了我不希望硬编码要更新的属性之外,它几乎是合适的

我可以想象以下工作流程:
1.订阅所有日期采集器的
onchanged
event
2.触发该事件时,从输入读取模型路径(例如,读取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。