当前位置: 首页 > 面试题库 >

正确使用控制器中的角度平移

薛淮晨
2023-03-14
问题内容

我在AngularJS应用程序中为i18n 使用angular-translate。

对于每个应用程序视图,都有一个专用的控制器。在下面的控制器中,我设置了要显示为页面标题的值。

的HTML

<h1>{{ pageTitle }}</h1>

的JavaScript

.controller('FirstPageCtrl', ['$scope', '$filter', function ($scope, $filter) {
        $scope.pageTitle = $filter('translate')('HELLO_WORLD');
    }])

.controller('SecondPageCtrl', ['$scope', '$filter', function ($scope, $filter) {
        $scope.pageTitle = "Second page title";
    }])

我正在使用angular-translate-loader-url扩展名加载翻译文件。

问题

在初始页面加载时,将显示翻译键,而不是该键的翻译。翻译是Hello, World!,但我看到了HELLO_WORLD

第二次我进入页面时,一切都很好,并显示了翻译版本。

我认为问题与以下事实有关:在控制器将值分配给时,转换文件可能尚未加载$scope.pageTitle

备注

使用<h1>{{ pageTitle | translate }}</h1>和时$scope.pageTitle = "HELLO_WORLD";,翻译从第一次开始就完美。问题是我并不总是要使用翻译(例如,对于第二个控制器,我只想传递原始字符串)。

这是已知问题/限制吗?如何解决呢?


问题答案:

编辑 :请参阅PascalPrecht(angular-translate的作者)的答案,以获得更好的解决方案。

加载的异步性质导致了该问题。您会看到,使用{{ pageTitle | translate }},Angular将监视该表达式;加载本地化数据后,表达式的值将更改,并且屏幕将更新。

因此,您可以自己做:

.controller('FirstPageCtrl', ['$scope', '$filter', function ($scope, $filter) {
    $scope.$watch(
        function() { return $filter('translate')('HELLO_WORLD'); },
        function(newval) { $scope.pageTitle = newval; }
    );
});

但是,这将在每个摘要循环上运行监视的表达式。这不是最理想的,可能会或可能不会导致明显的性能下降。无论如何,这是Angular所做的,所以它不会那么糟糕…



 类似资料:
  • 问题内容: 以下angular.ui模态示例显示了调用a ,该调用后来被创建为函数: 我有2个问题/问题: 文档建议以其他方式(由于缩小问题)创建控制器,例如: 但是,如果我像这样创建控制器,如何将其注入modalInstance? 我在这里调用的控制器不是Modal Instance控制器,而是我的global ,这是问题吗?我应该以某种方式继承loginCtrl还是从ModalInstance

  • 问题内容: 这是一个很长的路,但是以前有人见过这个错误吗?我正在尝试使用express,angular和mongoDB添加“ Transporters”。每当我访问由transporters控制器控制的页面时,都会收到此错误: 运输者控制器如下所示: 在我看来,我调用该列表并创建方法。他们产生上述错误 我从ng:areq的有角文档中得到了这个,尽管仍然不知道发生了什么 AngularJS经常断言,

  • 问题内容: 我在javascript上非常糟糕,而且对Angular还是很陌生,所以请耐心等待。 我的服务器返回此消息: services.js controller.js 我正在尝试通过访问服务器返回的json,但我正在获取。 在控制台中,如下所示: 我得到的是一个实例,但是如何直接获取值呢? 如果已在控制器中进行设置,则可以通过模板访问它。 我到底如何在控制器中执行此操作? 问题答案: 从文档

  • 我正在开发一个Joomla组件,我有许多任务要在组件中执行。我目前正在做的是拥有一个单一的视图和相应的控制器。现在如果用户请求某个任务,我只需在控制器中调用相应的方法。在这个方法中,我已经编写了所有显示给用户的超文本标记语言代码。一切工作正常。 我唯一的疑问是,我是否仍然遵循MVC模式,我的组件是否会被Joomla社区接受? 如果这不是正确的方法,请告诉我如何从单个控制器为不同的任务设置不同的视图

  • null 现在的问题是: > 作为控制器方法执行的结果,我将返回对象的映射,该映射将解析为JSON。可能的实体是: {“结果”:“12”} 我应该如何提供基于结果的附加消息?我能想到两个解决办法: > 返回映射,该映射在肯定验证结果的情况下具有result=true,在否定验证结果的情况下具有result=false,以及带有相应消息的errorCode 返回指示验证结果的布尔值,并另外对否定结果

  • 问题内容: 请参见下面的jsFiddle示例,其中我尝试使用angular.toJson将Angular.js对象推入JSon表示形式。结果就是“ $ SCOPE”。 http://jsfiddle.net/K2GsS/12/ 我想做的就是获取当前的属性和值。在这个例子中,我希望看到的是 有没有更好的方法来获取JSon形式的数据(即不使用范围)?显然,我可以手动滚动一个采用这些值并推出JSon表示