2016-08-05 91 views
0

加載索引時,我得到userName如何將ng-Init中的值傳遞給下一個控制器

MVC控制器動作

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

然後用ng-init嘗試存儲值。

的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> 

在初始NG-View模板,我仍然可以渲染{{user}}內容。但我想要的是將其拉入第一個角度控制器,以便在應用程序的整個生命週期中傳遞它,所以我不必再次向服務器查詢它。

我覺得這樣的事情會在第一模板工作呈現:

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

與具有$scope.username的控制器。這顯然不起作用,我相信是因爲Angular呈現的順序。

關於如何在應用程序的整個生命週期中保持該用戶名值的任何好主意,如果這不起作用?

+2

您可以隨時把東西在$ rootScope或者,更優選,在服務。這些是在應用程序的整個生命週期中都存在的單例。 – matmo

+1

如果您將後端編寫爲使用JSON請求/響應正文的API,Angular確實最有效。如上所述,您還可以將值插入提供程序(如工廠/服務/值),然後將其注入任何需要該值的其他控制器或提供程序。這看起來相關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

相關問題