2016-08-05 54 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

相关问题