Angularjs 访问控制器上未定义的筛选器中的控制器$scope
在ng repeat中,我希望动态设置日期的格式,因为用户可以选择更改格式,所以我创建了一个这样的过滤器Angularjs 访问控制器上未定义的筛选器中的控制器$scope,angularjs,Angularjs,在ng repeat中,我希望动态设置日期的格式,因为用户可以选择更改格式,所以我创建了一个这样的过滤器 <ul> <li ng-repeat"item in items"> <h2>{{item.date | formatDate }} </h2> </li> </ul> 问题是,筛选器调用的函数需要在控制器的$scope上定义一个值,因此我当前编写代码的方式是,该值不可用,即$scope在格式筛选器中不可
<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
,以便将范围传递到过滤器中。更新以反映您的建议,如果你是对的,它可能会更清晰。好的,谢谢你,我和你一起弄明白了