【发布时间】:2014-08-24 00:20:43
【问题描述】:
好吧,直截了当的问题是我的 $scope.$apply() 也没有消化更改以重新运行 translate 指令。 我向您展示了带有应用翻译指令和 jQUERY 代码的 HTML,以在调整窗口(客户端)大小时更改类。
菜单的 HTML:
<div id="navigation" ng-cloak>
<div class="container-fluid">
<a href="home.html" id="brand">BRAND NAME</a>
<ul class='main-nav'>
<li ng-class="{'active':activeLink == 'home'}">
<a href="#/">
<span>Home</span>
</a>
</li>
<li ng-class="{'active':activeLink == 'planning'}" data-trigger="hover">
<a href="#" data-toggle="dropdown" class='dropdown-toggle'>
<span>Planning</span>
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<a href="#" data-toggle="dropdown" class='dropdown-toggle'>Goals</a>
<ul class="dropdown-menu">
<li>
<a href="#/goals/listview">{{'TOP_MENU.GOAL_LIST' | translate}}</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
这里是 JQuery 代码,它可以响应屏幕大小的变化。
function checkLeftNav() {
var $w = $(window),
$content = $("#content"),
$left = $("#left");
if ($w.width() <= 840) {
if (!$left.hasClass("mobile-show")) {
$left.hide();
$("#main").css("margin-left", 0);
}
if ($(".toggle-mobile").length == 0) {
$("#navigation .user").after('<a href="#" class="toggle-mobile"><i class="fa fa-bars"></i></a>');
}
if ($(".mobile-nav").length == 0) {
createSubNav();
}
} else {
if (!$left.is(":visible") && !$left.hasClass("forced-hide") && !$("#content").hasClass("nav-hidden")) {
$left.show();
$("#main").css("margin-left", $left.width());
}
$(".toggle-mobile").remove();
$(".mobile-nav").removeClass("open");
if ($content.hasClass("forced-fixed")) {
$content.removeClass("nav-fixed");
$("#navigation").removeClass("navbar-fixed-top");
}
if ($w.width() < 1200) {
if ($("#navigation .container").length > 0) {
versionFluid();
$('body').addClass("forced-fluid");
}
} else {
if ($('body').hasClass("forced-fluid")) {
versionFixed();
}
}
}
}
现在我的解决方案是获取 jquery 应用类的导航元素范围,并在其范围内调用 $apply()。这是行不通的。
解决方案代码:
$(window).resize(function(e) {
checkLeftNav();
// get the scope of element and apply $apply()
var sc = angular.element('.mobile-nav').scope();
sc.$apply();
});
但是,当屏幕尺寸更改为小于 840 的移动视图时,我仍然可以在这样的菜单中看到直接代码值而不是翻译文本。当我改回屏幕宽度超过 840 时,它会显示正确的翻译文本。我正在通过调整大小在我的电脑上的 chrome 上进行试验。我在手机上查了一下,那里也没有翻译。
【问题讨论】:
标签: css angularjs responsive-design angularjs-directive angularjs-scope