Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 访问控制器上未定义的筛选器中的控制器$scope_Angularjs - Fatal编程技术网

Angularjs 访问控制器上未定义的筛选器中的控制器$scope

Angularjs 访问控制器上未定义的筛选器中的控制器$scope,angularjs,Angularjs,在ng repeat中,我希望动态设置日期的格式,因为用户可以选择更改格式,所以我创建了一个这样的过滤器 <ul> <li ng-repeat"item in items"> <h2>{{item.date | formatDate }} </h2> </li> </ul> 问题是,筛选器调用的函数需要在控制器的$scope上定义一个值,因此我当前编写代码的方式是,该值不可用,即$scope在格式筛选器中不可

在ng repeat中,我希望动态设置日期的格式,因为用户可以选择更改格式,所以我创建了一个这样的过滤器

<ul>
<li ng-repeat"item in items">
      <h2>{{item.date | formatDate }} </h2>

</li>
</ul>
问题是,筛选器调用的函数需要在控制器的$scope上定义一个值,因此我当前编写代码的方式是,该值不可用,即$scope在
格式
筛选器中不可用,它调用的
格式日期函数
也不可用


问题:我如何访问上面过滤器中的作用域,或者相反地,将其排列成
{{item.date | formatDate}}
调用控制器上的过滤器?

您已经混合了关注点分离,您应该提供所需的语言作为过滤器的参数。这意味着您仍然可以在控制器中将desiredLanguage定义为作用域变量a la

$scope.desiredLanguage = 'en-us'
但是您可以通过HTML将其作为参数传递给过滤器。这意味着您的控制器保持不变,而您的过滤器变为:

myapp.filter('formatDate', function(){
     return function(date,language) {
           return formatDateFunction(date,language)
     }
}
function formatDateFunction(unix_epoch, language){
     var date = new Date(unix_epoch);     
     var time = date.toLocaleTimeString(language, options);
     return time;
}
然后在html中,您只需使用:

<h2>{{item.date | formatDate:desiredLanguage }} </h2>
{{item.date | formattate:desiredLanguage}

这将在控件中保持范围和参数的分离,从而鼓励重用、模块化和可测试性。

如果您混合了关注点的分离,您应该提供所需的语言作为过滤器的参数。这意味着您仍然可以在控制器中将desiredLanguage定义为作用域变量a la

$scope.desiredLanguage = 'en-us'
但是您可以通过HTML将其作为参数传递给过滤器。这意味着您的控制器保持不变,而您的过滤器变为:

myapp.filter('formatDate', function(){
     return function(date,language) {
           return formatDateFunction(date,language)
     }
}
function formatDateFunction(unix_epoch, language){
     var date = new Date(unix_epoch);     
     var time = date.toLocaleTimeString(language, options);
     return time;
}
然后在html中,您只需使用:

<h2>{{item.date | formatDate:desiredLanguage }} </h2>
{{item.date | formattate:desiredLanguage}

这将在控件中保持范围和参数的分离,从而鼓励重用、模块化和可测试性。

如果您混合了关注点的分离,您应该提供所需的语言作为过滤器的参数。这意味着您仍然可以在控制器中将desiredLanguage定义为作用域变量a la

$scope.desiredLanguage = 'en-us'
但是您可以通过HTML将其作为参数传递给过滤器。这意味着您的控制器保持不变,而您的过滤器变为:

myapp.filter('formatDate', function(){
     return function(date,language) {
           return formatDateFunction(date,language)
     }
}
function formatDateFunction(unix_epoch, language){
     var date = new Date(unix_epoch);     
     var time = date.toLocaleTimeString(language, options);
     return time;
}
然后在html中,您只需使用:

<h2>{{item.date | formatDate:desiredLanguage }} </h2>
{{item.date | formattate:desiredLanguage}

这将在控件中保持范围和参数的分离,从而鼓励重用、模块化和可测试性。

如果您混合了关注点的分离,您应该提供所需的语言作为过滤器的参数。这意味着您仍然可以在控制器中将desiredLanguage定义为作用域变量a la

$scope.desiredLanguage = 'en-us'
但是您可以通过HTML将其作为参数传递给过滤器。这意味着您的控制器保持不变,而您的过滤器变为:

myapp.filter('formatDate', function(){
     return function(date,language) {
           return formatDateFunction(date,language)
     }
}
function formatDateFunction(unix_epoch, language){
     var date = new Date(unix_epoch);     
     var time = date.toLocaleTimeString(language, options);
     return time;
}
然后在html中,您只需使用:

<h2>{{item.date | formatDate:desiredLanguage }} </h2>
{{item.date | formattate:desiredLanguage}

这将保持控件中作用域和参数的分离,从而鼓励重用、模块化和可测试性。

尝试在formatDateFunction中使用This.desiredLanguagefunction@JorgeCasariego不起作用
FormattedTef函数中的此
为“未定义的
”,FormattedAtefunction
与定义了
$scope.desiredLanguage
MyCtrl
之间没有连接,例如,$scope在formatDateFunction中不存在。请尝试在formatDateFunction中使用此.desiredLanguagefunction@JorgeCasariego不起作用
FormattedTef函数中的此
为“未定义的
”,FormattedAtefunction
与定义了
$scope.desiredLanguage
MyCtrl
之间没有连接,例如,$scope在formatDateFunction中不存在。请尝试在formatDateFunction中使用此.desiredLanguagefunction@JorgeCasariego不起作用
FormattedTef函数中的此
为“未定义的
”,FormattedAtefunction
与定义了
$scope.desiredLanguage
MyCtrl
之间没有连接,例如,$scope在formatDateFunction中不存在。请尝试在formatDateFunction中使用此.desiredLanguagefunction@JorgeCasariego不起作用
FormattedTef函数中的此
为“未定义的
”,FormattedAtefunction
与定义了
$scope.desiredLanguage
MyCtrl
之间没有连接,例如,$scope在formatDateFunction中不存在。好的,谢谢你,我在你的帮助下解决了这个问题,但问题的要点是如何将作用域传递给筛选器,阅读此问题的其他人可能会更清楚,在
formatDate:desiredLanguage
中,参数
desiredLanguage
在控制器中的$scope上定义,如
$scope.desiredLanguage
,以便将范围传递到过滤器中。更新以反映您的建议,正如你所说,它可能更清晰。好的,谢谢你,我在你的帮助下解决了这个问题,但由于问题的要点是如何将作用域传递给筛选器,阅读此问题的任何其他人可能会更清楚,在
formatDate:desiredLanguage
中,
desiredLanguage
参数是在控制器$scope上定义的,类似于
$scope.desiredLanguage
,以便将作用域传递到筛选器。更新以反映您的建议,因为您是对的,它可能会更清晰。好的,谢谢您,我在您的帮助下解决了这个问题,但问题的要点是如何将作用域传递到筛选器,阅读此问题的其他人可能会更清楚,在
formatDate:desiredLanguage
中,参数
desiredLanguage
在控制器中的$scope上定义,如
$scope.desiredLanguage
,以便将范围传递到过滤器中。更新以反映您的建议,如果你是对的,它可能会更清晰。好的,谢谢你,我和你一起弄明白了