Angularjs 标签文本更改时,Angular UI pager指令不会重新呈现

Angularjs 标签文本更改时,Angular UI pager指令不会重新呈现,angularjs,internationalization,angular-ui,angular-ui-bootstrap,Angularjs,Internationalization,Angular Ui,Angular Ui Bootstrap,我正在使用AngularJS和AngularUI引导。对于i18n,我使用角度平移,它提供了一个过滤器|translate来处理平移。使用以下代码,pager指令的previous text和next text不会在视图中更新,而所有其他标签在更改语言时都会正确更改 如何强制pager指令重新呈现与当前翻译相对应的内容?我应该在angular ui或angular translate中将其作为bug/新功能来解决吗 其他组件也会出现相同的行为(例如警报) 更新1 注意:重新加载页面时,标签将以所

我正在使用AngularJS和AngularUI引导。对于i18n,我使用角度平移,它提供了一个过滤器
|translate
来处理平移。使用以下代码,
pager
指令的
previous text
next text
不会在视图中更新,而所有其他标签在更改语言时都会正确更改

如何强制pager指令重新呈现与当前翻译相对应的内容?我应该在angular ui或angular translate中将其作为bug/新功能来解决吗

其他组件也会出现相同的行为(例如警报)

更新1


注意:重新加载页面时,标签将以所需语言正确显示!但是我想在不重新加载的情况下实现它。

我在更新值方面也有类似的问题,并且发现使用“apply()”是有效的。也许试试这个

function ($translate, $scope) {
$scope.switchLang = function (lang) {
    $scope.$apply(function() {
        $translate.uses(lang);
    });
};}]);

我在更新值时也遇到类似的问题,并发现使用“apply()”是有效的。也许试试这个

function ($translate, $scope) {
$scope.switchLang = function (lang) {
    $scope.$apply(function() {
        $translate.uses(lang);
    });
};}]);

有趣!由于您使用的是过滤器,下一个$digest周期实际上应该会收集一些东西。显然是这样,否则在重新加载页面后,语言就不会改变


我想我们得看看这个角型用户界面寻呼机的引擎盖下面。也许寻呼机指令会缓存给定的标签?

有趣!由于您使用的是过滤器,下一个$digest周期实际上应该会收集一些东西。显然是这样,否则在重新加载页面后,语言就不会改变


我想我们得看看这个角型用户界面寻呼机的引擎盖下面。也许寻呼机指令会缓存给定的标签?

我还没有测试过它,但下面的代码似乎可以工作:

angular.module('myApp')
.controller('LanguageCtrl', ['$translate', '$scope',
    function ($translate, $scope) {
        $scope.switchLang = function (lang) {
            $translate.uses(lang);
        };
        $scope.$on('$translateChangeSuccess', function () {
            // this will be called after switching languages,
            // so you could force a $scope.PREV here and
            // change your HTML to use a variable.
            // However, maybe just calling $translate will
            // force your frontend to update
            $translate('PREV');
            $translate('NEXT');
        });
    }]);

我还没有对它进行测试,但以下几点似乎可以:

angular.module('myApp')
.controller('LanguageCtrl', ['$translate', '$scope',
    function ($translate, $scope) {
        $scope.switchLang = function (lang) {
            $translate.uses(lang);
        };
        $scope.$on('$translateChangeSuccess', function () {
            // this will be called after switching languages,
            // so you could force a $scope.PREV here and
            // change your HTML to use a variable.
            // However, maybe just calling $translate will
            // force your frontend to update
            $translate('PREV');
            $translate('NEXT');
        });
    }]);

我也有同样的问题,但我重新阅读了一遍,似乎一个
-text
属性标记为
C
。从文件中

可以在固定服务中全局配置此设置

-text
属性看起来像一个常量。在page指令之外,我打印出
{{'PREV'| translate}}
,它按预期工作,并挂起在pagination指令中。我认为在页面上强制重载对区域设置敏感的状态是一个不错的选择。我这样做,但你可以重写我的代码,使用主要思想

装饰师

$provide.decorator('$state', function($delegate, $stateParams) {
        $delegate.forceReload = function() {
            return $delegate.go($delegate.current, $stateParams, {
                reload: true,
                inherit: false,
                notify: true
            });
        };
        return $delegate;
    });
使用

已更新

我发现只重新呈现分页指令而不刷新整个页面是一种欺骗。它对
total items
属性敏感

var total = $scope.totalItems;
$scope.totalItems = 0
$scope.totalItems = total;

指令重新呈现,所有
-text
属性也使用新的本地化字符串重新呈现。

我也有同样的问题,但我重新读取,似乎
-text
属性标记为
C
。从文件中

可以在固定服务中全局配置此设置

-text
属性看起来像一个常量。在page指令之外,我打印出
{{'PREV'| translate}}
,它按预期工作,并挂起在pagination指令中。我认为在页面上强制重载对区域设置敏感的状态是一个不错的选择。我这样做,但你可以重写我的代码,使用主要思想

装饰师

$provide.decorator('$state', function($delegate, $stateParams) {
        $delegate.forceReload = function() {
            return $delegate.go($delegate.current, $stateParams, {
                reload: true,
                inherit: false,
                notify: true
            });
        };
        return $delegate;
    });
使用

已更新

我发现只重新呈现分页指令而不刷新整个页面是一种欺骗。它对
total items
属性敏感

var total = $scope.totalItems;
$scope.totalItems = 0
$scope.totalItems = total;

指令重新呈现,所有
-text
属性也使用新的本地化字符串重新呈现。

谢谢,但这不起作用,因为它是通过ng click调用的。导致错误:
error:[$rootScope:inprog]$apply已在进行中
如果应该显式调用apply,这可能会很有帮助:
$timeout(function(){},1)
$timeout
隐式调用
$apply
,但是,大多数情况下这只是肮脏的黑客攻击,没有解决原始问题。;)谢谢,但这不起作用,因为它是通过ng click调用的。导致错误:
error:[$rootScope:inprog]$apply已经在进行中
如果应该显式调用apply,这可能会很有帮助:
$timeout(function(){},1)
$timeout
隐式调用
$apply
,但是,大多数情况下,这只是肮脏的黑客攻击,没有解决原始问题;)原因很简单,
PREV
NEXT
的翻译不可用。请验证翻译是否存在。谢谢,是的,它存在。当我完全重新加载页面时,可以看到正确的翻译。angular translate创建的问题您可以添加一个测试用例,plunkr或JSFIDLE吗?我建议组件本身不会收到语言更改的通知。原因可能很简单,如
PREV
NEXT
的翻译不可用。请验证翻译是否存在。谢谢,是的,它存在。当我完全重新加载页面时,可以看到正确的翻译。angular translate创建的问题您可以添加一个测试用例,plunkr或JSFIDLE吗?我建议组件本身不会收到语言更改的通知。它是关闭的,但在实际中,
-text
属性像字符串常量一样工作,指令重新呈现使用实际数据刷新此值它是关闭的,但在实际中,
-text
属性像字符串常量一样工作,指令重新呈现使用实际数据刷新此值翻译调用中不存在问题,请参阅我的应答问题不在翻译调用中,请参阅我的答案