2016-08-05 7 views
0

インデックスをロードするときにuserNameと表示されます。ng-Initから次のコントローラに値を渡す方法

MVCコントローラのアクション

public ActionResult Index() 
{ 
    string userName = "Current User" 
    return View((object)userName); 
} 

そして、値を格納しようとするng-initを使用しています。初期NG-ビューテンプレートにIndex.htmlと

@model string 
<!DOCTYPE html> 
<html ng-app="myApp" ng-init="user='@Model'"> 
    <body> 
     <div>Welcome @Model!</div> 
     <div ng-view=""></div> 
    </body> 
</html> 

、私はまだ{{user}}の内容をレンダリングすることができます。しかし、私が望むのは、最初の角度コントローラーに取り込んでアプリケーションのライフサイクル全体に渡すことができるので、サーバーに再度照会する必要はありません。

私はこのような何かをレンダリングする最初のテンプレートに働くだろうと思った:$scope.usernameを持っているコントローラと

<div ng-init="vm.username='{{user}}'> 

。それはAngularがどのようにレンダリングするかの順序のために私が信じるものではありません。

これがうまくいかない場合、アプリケーションのライフサイクルを通じてそのユーザー名の価値をどのように保持できるかについての良いアイデアはありますか?

+2

あなたは常にサービスで、より好ましくは、$ rootScopeで物事を入れたりすることができます。これらは、アプリケーションの存続期間中存続するシングルトンです。 – matmo

+1

Angleは、JSONリクエスト/レスポンス本体を使用するAPIとしてバックエンドを記述すると最も効果的です。上記のように、ファクトリ/サービス/値のようなプロバイダに値を挿入し、その値を必要とする他のコントローラやプロバイダに値を挿入することもできます。これは適切なhttps://docs.asp.net/en/latest/tutorials/first-web-api.htmlにも見えます。特定の要素に対して行われるスコープは、通常、ディレクティブが分離スコープを作成しない限り、親から子に継承されますが、どんな場合でも、プロバイダは適切な値を注入するためのより確実な方法です。 – shaunhusain

+0

はい、それはデータを提供するWeb APIを使って書かれています。それで、サービスを注入することは、私が行かなければならない方法のようです。もしあなたの誰かがそれを答えに入れるなら、私はそれをそのようにマークします。ありがとう! – jlembke

答えて

0

はそれを試してください:

@model string 
<!DOCTYPE html> 
<html ng-app="myApp"> 
    <body ng-init="user='@Model'"> 
     <div>Welcome @Model!</div> 
     <div ng-view=""></div> 
    </body> 
</html> 
+0

これは何をするのですか?他のテンプレートに{{user}}を表示する以外に何もできません。私は別のコントローラでそれを参照できるようにする必要があります。 – jlembke

関連する問題