Angularjs 从承诺结果返回字符串
我希望在这个Angularjs 从承诺结果返回字符串,angularjs,angular-promise,angular-translate,Angularjs,Angular Promise,Angular Translate,我希望在这个$translate服务周围有一个包装函数:这样我们就可以通过调用$language.translate('keyword')而不是promise在代码中轻松地使用这些函数 因此,我在我的应用程序中创建了一个新的服务,它应该可以完成这项工作。这是一个非常简单的函数,但它返回未定义的或[Object Object] angularApp.factory("$language", ['$translate', function($translate){ function tr
$translate
服务周围有一个包装函数:这样我们就可以通过调用$language.translate('keyword')而不是promise在代码中轻松地使用这些函数
因此,我在我的应用程序中创建了一个新的服务,它应该可以完成这项工作。这是一个非常简单的函数,但它返回未定义的
或[Object Object]
angularApp.factory("$language", ['$translate', function($translate){
function trans(keyword){
console.log("translate in $language", keyword);
return $translate(keyword).then(function(msg) {
console.log("translation successfull", msg);
return msg;
}, function(translationId){
console.log("translation is not known", translationId);
return translationId
})
}
return {
translate : trans
}
}]);
在这两种情况下,当知道或不知道翻译时,console.log()
会显示正确的字符串,但在我的页面上它会显示[object object]或undefined(当我删除第一个返回之前的$translate(关键字)
)。
当我使用像{::“KEYWORD”| translate}}
这样的过滤器时,效果很好
如何让我的函数返回带有translation或translationId的字符串(在没有找到translation时,它实际上与关键字相同)?看起来您希望结果是同步的,如果您使用的是async variant,无论如何它将返回Promise
对象
您似乎可以使用$translate.instant()
使用$translate
服务的synchronous
变体,但此sync
变体的缺点是,如果在翻译过程之间发生任何情况,您将不会收到错误代码
重写
angularApp.factory("$language", ['$translate', '$sce', function($translate, $sce){
function trans(keyword){
console.log("translate in $language", keyword);
var translation = $translate.instant(keyword)
var msg = $sce.valueOf(translation);
if (msg) {
console.log("translation successfull", msg);
return msg;
}
else {
console.log("translation is not known");
return "Error"
}
}
return {
translate : trans
}
}]);
太好了!这就是我需要的!@NVO很高兴看到它有帮助,谢谢:)