我的html文件中有以下设置::
<body>
<nav ng-controller="loginCtrl">
<div>
<li>Apple</li>
<li>Mango</li>
<li>{{user}}</li>
</div>
</nav>
<div ui-view></div>
</body>
我有一个导航菜单,ui-view
显示不同的页面。
我还有一个控制器loginCtrl
,其范围变量名为$scope.user
。此控制器也在login.html
文件的UI状态路由器中调用,以便登录表单可以使用其方法。
当用户登录时,我想使用上面的{{user}}
在导航菜单中显示他的名字。您可以看到的导航菜单是可见的(静态),无论将在ui-view
中加载的其他部分页面如何。
目前,它不起作用,我不知道为什么。
我的理解是login.html和导航菜单中的登录表单位于不同的文件中,因此可能是他们使用相同的控制器(在同一模块下),但可能在不同的范围/环境中运行(上午不太确定。)
这就是为什么我更新$scope.user
的值,但它并没有出现在导航菜单中。
有人可以向我解释为什么它不起作用以及如何实现我的功能吗?
由于
答案 0 :(得分:2)
使用单件服务共享相同的UserData
对象:
app.service('UserData', function(){return {name: 'default'};});
app.controller('LoginController', function($scope, UserData){
$scope.user = UserData;
});
现在,所有控制器实例都可以访问相同的UserData
对象
当user.name
发生变化时,所有控制器都可以看到它。
答案 1 :(得分:0)
我想知道是否有必要为你的ui-view和兄弟元素调用你的LoginController,当你可以将它加载到父元素上时
无论如何,您有几种解决方案可以实现双向绑定:
$scope.user = {};
然后将其填入您的子范围,如下所示:
$scope.user.name = ...
即使您使用与父AND子范围相同的控制器,您也应该使用以下内容:
$ scope.user = $scope.user ? $scope.user : {};
而不是$scope.user = {};
(如果不清楚我可以向你展示一个比较小提琴)
当我遇到像你这样的问题时,这个维基真的帮助了我:https://github.com/angular/angular.js/wiki/Understanding-Scopes