4

SO コミュニティからの大きな助けのおかげで、 ui-routerライブラリを使用して複数の状態/ビューを使用する動作中の角度 SPA があります。ただし、ドキュメントと矛盾しているように見える動作が発生していangular-ui-routerます。

onEnterに関する彼らのドキュメントから、私が使用するときはいつでも$state.go("home")、その状態の構成オブジェクトに関連付けられたonEnter()イベントが開始されると予想されますが、それが発生することはありません。例:

/* myApp module */
var myApp = angular.module('myApp', ['ui.router'])
.config(['$stateProvider', function ($stateProvider) {

$stateProvider.state('home', {
    url: "/",
    views: {
        'top': {
            url: "",
            template: '<div>top! {{topmsg}}</div>',
            controller: function ($scope) {
                $scope.topmsg = "loaded top!";
                console.log("top ctrl!");
            },
            onEnter: function () {
                console.log("entered bottom state's onEnter function");
            }
        },
        'middle': {
            url: "",
            template: '<div>middle! {{middlemsg}}</div>',
            controller: function ($scope) {
                $scope.middlemsg = "loaded middle!";
                console.log("middle ctrl!");
            },
            onEnter: function () {
                console.log("entered bottom state's onEnter function");
            }
        },
        'bottom': {
            url: "",
            template: '<div>bottom! {{bottommsg}}</div>',
            controller: function ($scope) {
                $scope.bottommsg = "loaded bottom!";
                console.log("bottom ctrl!");
            },
            onEnter: function () {
                console.log("entered bottom state's onEnter function");
            }
        }
    },
    onEnter: function () {
        console.log("entered home state");
    }
  });
}])
.controller('MyAppCtrl', function ($scope, $state/*, $stateParams*/) {
    $scope.statename = $state.current.name;
    $scope.testmsg = "app scope working!";
    console.log("MyAppCtrl initialized!");
    $state.go("home");
});

状態の構成オブジェクトのすべての呼び出しからわかるようonEnter()に、私の期待は、ホーム状態が読み込まれると、それらがヒットしたすべての状態/ビューのリストがコンソール メッセージから出力されるようになることでした。ただし、状態のイベントから、最初のentered home stateメッセージのみがログに記録されます。他のビューは 1 つもヒットしていません。ドキュメントを読み間違えていますか?homeonEnteronEnter

これは、デモンストレーションする待望のフィドルです。firebug/chrome devtools でコンソールを表示するだけで、コンソール出力がないことがわかります。

どんな助けでも素晴らしいでしょう。angular 1.2 と ui-router 0.2.0 を使用しています。前もって感謝します!

4

2 に答える 2

20

2つのこと:

  • このメソッドは、ビューではなく状態onEnterに適用されます。定義には 1 つの状態と 3 つのビューがあり、何らかの理由でビューに URL を添付しようとしました。

  • 状態に入るには、まず状態を終了する必要があります。(A) 実際にhome状態を離れることはありません (最初に状態定義が 1 つしかないため)。(B) 実際に 内に子ステートを作成しようとしているようですhome。構文を修正しても、それは機能しません。親の子状態に入るとき、同じ親内の別の子状態に変更することによって、実際に親状態を離れることはまだないためです。のトリガーonEnter

于 2014-02-03T02:24:15.353 に答える