2013-05-10 71 views
0

我正在使用angular-ui:的date指令(uiDate)并需要对其进行配置。我可以这样做:

app.value('ui.config', { 
    date: { 
     dateFormat: 'yy-mm-dd', // <-- I want to use $locale.shortDateFormat 
     changeMonth: true, 
     changeYear: false 
    } 
}); 

其中app是我的应用程序模块。

我想要做的是从angulars $ locale对象中定义dateFormat,它使用i18n包含我的文化特定的日期格式。

虽然应用程序的属性value似乎无法访问$ locale,但我觉得这是做错的方法。

如何从locale对象提供dateformat和其他东西到我的指令,而不必修改ui-date的源代码(因为它是我的项目的外部依赖项)。

我可以通过在我的控制器中设置这个对象来解决这个问题,但那不是我想要的。这是一种适用于我所有控制器的配置。

+1

在app.run试过吗? – Ven 2013-05-10 11:20:58

回答

0

AngularUI目前正在进行一些重构,稍微改变这一点。

无论如何,您总是可以将dateFormat属性传递给uiDate内联,它将与全局配置合并。我不知道是否可以按照建议在app.run中设置.value(),但我认为.value()应该很容易被覆盖。您甚至可以尝试修改该对象,因为理论上该引用将被保留(取决于执行指令注入函数的时间)。

对不起,这不是更有帮助。

+0

感谢您的回答!所以当我配置一个模块时,不可能有一个新的$ locale实例? – marko 2013-05-10 11:55:02

+0

我现在的解决方案是从服务中获取这些全局选项,这看起来像是矫枉过正,因为我需要为每个范围明确设置选项。 – marko 2013-05-10 12:21:56

+1

为什么你需要为每个范围设置选项?它们是独一无二的还是只是说你必须在每个控制器级别传递它?如果它们不是唯一的,只需在'$ rootScope'上声明配置即可。或者,您可以在'$ rootScope'上创建一个选项生成器方法,为您添加任何独特的选项。 – ProLoser 2013-05-10 18:37:09

0

您可以使用bootstrap来做到这一点。你甚至不需要在里面使用它。

更多关于自举:http://docs.angularjs.org/guide/bootstraphttp://docs.angularjs.org/api/angular.bootstrap

只是注意......当网站上浏览的版本设置为1.2,所以你可以看到评论。这非常有帮助。

HTML

<ul id="result"> 

</ul> 

的Javascript

var locale = angular.bootstrap(function ($locale) { }).get('$locale'), 
    html = ''; 


for(var i = 0; i < locale.DATETIME_FORMATS.MONTH.length; i++) { 
    html += '<li>' + locale.DATETIME_FORMATS.MONTH[i] + '</li>'; 
} 

$('#result').html(html); 

的jsfiddle:http://jsfiddle.net/82aRW/