1

アプリケーションを開発し、angularJS の最新の安定版と不安定版を試してみたアプリケーションは、IE 9 と IE8 を除くすべてのブラウザ (およびおそらくそれ以下) で問題なくロードされます。

$rootScope.$on('$locationChangeSuccess', updateRoute); したがって、updateRoute メソッドを呼び出すことはありません。ただし、関数 afterLocationChange が呼び出されます。IE8debugger で実行されている厄介な IE10 のおかげでデバッグできなかった (angularJS で設定したブレークポイントで中断しない) ため、console.log 出力を使用しました。

私は手動でブートストラップしており、ルーティングの特定の方法があります。ng-views ではなく ng-include / ng-switch を使用せず、ルートにアクション プロパティを追加します。このプロパティは、メイン コントローラーによって評価され、スコープに注入されます。ビューは ng-switch に使用しています。updateRoute が呼び出されていないように見えるため、ルーティングの方法に関連しているかどうかはわかりませんが、間違っている場合に備えてコードをここに示します。

ルート定義機能(LOGIN)

{
    LOGIN.config
    (
        [
            '$routeProvider', '$locationProvider', '$dialogProvider',
            function ($routeProvider, $locationProvider, $dialogProvider)
            {
                $locationProvider.html5Mode(true).hashPrefix = '!';

                $routeProvider
                    .when("/", { action: "login" })
                    .when("/forgot_password/", { action: "forgot_password" });
            }
        ]
    );
}

アプリケーションコントローラー

function (LOGIN)
{
    LOGIN.controller(
        'controllerApplication',
        [
            '$scope', '$route',
            function ($scope, $route) {
                var self = this;

                // Update the rendering of the page.
                this.render = function ()
                {
                    // Pull the "action" value out of the currently selected route.
                    var renderAction = $route.current.action;

                    // Also, let's update the render path so that we can start conditionally rendering parts of the page.
                    var renderPath = renderAction.split(".");

                    // Reset the boolean used to set the css class for the navigation.
                    var inLogin     = (renderPath[0] === "login");
                    var inPassword  = (renderPath[0] === "forgot_password");

                    // Store the values in the model.
                    $scope.renderAction = renderAction;
                    $scope.renderPath   = renderPath;
                    $scope.inLogin      = inLogin;
                    $scope.inPassword   = inPassword;
                    $scope.loaded       = false;
                };

                // Listen for changes to the Route.
                // When the route changes, let's set the renderAction model value
                // so that it can render in the Strong element.
                $scope.$on
                (
                    "$routeChangeSuccess",
                    function ($currentRoute, $previousRoute)
                    {
                        // Update the rendering.
                        self.render();
                    }
                );
            }
        ]
    );
}

そして私の部分的に

<div id="main-container" ng-switch on="renderPath[0]">
    <div ng-switch-when="login" ng-include=" 'js/app/login/partials/login.html' "></div>
    <div ng-switch-when="forgot_password" ng-include=" 'js/app/login/partials/forgot-password.html' "></div>
</div>

ここにバグを記録しました https://github.com/angular/angular.js/issues/2608

しかし、誰もこの問題を抱えていないのは奇妙に思えるので、人々からの意見をお待ちしています.

IE8 で動作するアプリはまだ見たことがありません。
リンクなどありましたら、ぜひチェックしていただければ幸いです。乾杯。

4

1 に答える 1

0

とても恥ずかしいです... :)

デバッグに1時間費やし、angularがIEのng-controllerディレクティブを見つけられないことを発見した後、IE固有のhtmlディレクティブに同じコントローラーを含めるのを忘れていたことに気付きました...

<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en" ng-controller="controllerApplication"> <![endif]-->
<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en" ng-controller="controllerApplication"> <![endif]-->
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en" ng-controller="controllerApplication"> <![endif]-->
<!--[if gt IE 8]> <html class="no-js" lang="en" ng-controller="controllerApplication"> <![endif]-->
于 2013-05-10T04:25:09.193 に答える