0

したがって、成功したリダイレクト内で mongoose Passport-local を介してユーザー名を表示できます。

app.get('/profile', isLoggedIn, function (req, res) {
    res.render('profile.html', {
        user: req.user
    });
    console.log(req.user.local.username) //correct username for the session
});

...そしてそれを使用して、profile.html 内に表示します。

<p><%= user.local.username %></p>

...まだ私のng-view内で同じものを表示しようとすると:

<div ng-view ng-class="slide" class="slider"></div>

...私のルートexample.htmlテンプレート経由:

<p>welcome <%= user.local.username %></p>

..表示どおりに表示されます: 正しいユーザー名ではありません...

この情報を ngView 内に含めることはできませんか? この情報をテンプレートに含める解決策はありますか? $http でファクトリをセットアップしようとしました:

angular.module('userService', [])

.factory('Users', function($http) {
    return {
        get : function() {
            return $http.get('/profile');
        }
    }
});

...しかし、それはhtml全体を返していたので、正しい解決策ではありません.

ガイダンスはいつでも歓迎され、感謝されますので、事前に感謝します!

それに応じて編集: 値を取得してルーティングすることは、実際には問題ではありません。問題は、ngView 内で正しく表示されるようにすることです。

ここに私の更新されたコードがあります:

Rules.get()
        .success(function (data) {
            $scope.rules = data;
            console.log('Rules.get()');
            console.log(data);

            Users.get()
                .success(function (username) {
                    Users.username = username;
                    console.log('Users.get()')
                    console.log(username)
                });
        });

...と...

angular.module('userService', [])

.factory('Users', function ($http) {
    return {
        get: function () {
            console.log('userService')
            return $http.get('/profile/user');
        }
    }
});

...から戻ります:

app.get('/profile/user', function (req, res) {
    console.log('profile/user')
    console.log(req.user.local.username)
    res.json(req.user.local.username);

});

これにより、同じ正しいユーザー名が得られますが、悲しいことに、それをngViewに表示するにはどうすればよいですか? 実際の ngView div の外に配置すると、正常に表示されます。

上記から {{username}} {{rules.username}} = なし。ngView テンプレート内のサービス パラメータの名前は何にする必要がありますか (これはまったく新しい $scope であると想定しています)。

4

2 に答える 2

1

質問は、 Angular と Express ルーティングの重複の可能性がありますか?

ng-views 内に ejs テンプレート ( など<%= value %>) を含めることもできますが (上記のリンクを参照)、他に 3 つのオプションがあります。

多くの人がサーバー データを Angular に渡し、Angular にビューをテンプレート化させます (例: MEAN スタック)。これは、Angular パーシャルで ejs テンプレートを使用する必要がないことを意味します。サーバーから Angular にデータを渡す 3 つの方法を次に示します (このブログ投稿のクレジット: http://mircozeiss.com/how-to-pass-javascript-variables-from-a-server-to-angular/ )。

1.平均法

1 つ目は、MEAN スタックで使用されるものです。ng-view のラッパーで Angular アプリが必要とするすべてのデータを送信できます。

<!-- head -->
<!-- body -->
<!-- ng-view element -->

<script type="text/javascript">window.user = <%- user %>;</script>

<!-- rest of js -->
<!-- /body -->

このようにして、次のようなプロバイダーを介して Angular アプリからデータにアクセスできます。

angular.module('myApp')
.factory('UserData', [
    function() {
        return {
            user: window.user
        };
    }
]);

2. $httpAPI の使用

2 つ目は、安静な API を介してこのデータを提供し、$httporを使用してプロバイダーを介してデータを要求すること$resourceです。

angular.module('myApp')
.factory('UserData', [
    function($http) {
        $http.get('/userAPI').success(function(data){
            return data;
        });
    }
]);

3. ng-init の使用

最後に、ng-init 内でサーバー側のテンプレートを使用できます。

<div ng-init="user = <%- data %>"></div>

これにより$scope.user、Angular アプリが使用するデータが配置されます。

于 2014-02-02T01:49:08.140 に答える
1

そこで、検索している可能性のある他の人のための私の解決策を次に示します。

users.js:

angular.module('userService', [])

.factory('Users', function ($http) {
    return {
        get: function () {
            console.log('userService')
            return $http.get('/profile/user');
        }
    }
});

route.js

$scope.username = {};    
.controller('cntrl', function ($scope, Users) {
        getCurrentUser(Users, $scope);
    })

        function getCurrentUser(Users, $scope) {
        Users.get()
            .success(function (username) {
                $scope.username = username.user;
            });
    }

サービス.js:

app.get('/profile/user', function (req, res) {
    console.log('profile/user')
    console.log(req.user.local.username)
    res.jsonp({ user:req.user.local.username});

});

次に、html 内 (任意の ngView テンプレート内):

<span class="username">{{username}}</span>

キーは次のとおりです。

$scope.username = {};
于 2014-02-04T23:20:20.363 に答える