在AngularJS的另一个控制器中更新变量

Posted

技术标签:

【中文标题】在AngularJS的另一个控制器中更新变量【英文标题】:update variable in another controller in AngularJS 【发布时间】:2015-10-19 08:09:04 【问题描述】:

好的,所以我正在使用 angular.js 构建一个网络应用程序。我已经开始实现用户认证了。

我用它自己的控制器做到了这一点:

app.controller("userControl", ["$http", "share", function($http, share)
this.login = ;
var user = this;
this.doLogin = function()
    this.login.fn = "login";
    $http.post('classes/main.php', user.login).success(function(data)
        console.log(data.Error);
        if(data.Error == undefined)
            alert("Success");
            share.user = data;
            window.location.href = "#memberHome";
        
    ); 

]);

我有一个带有自己控制器的会员页面:

html

<div id="memberHome" data-role="page" ng-controller="member-Ctrl as member">
    <nav class="navbar navbar-inverse">
        <div class="container-fluid">
            <div class="navbar-header">
                <p class="navbar-brand" href="#">Calendar</p>
            </div>
            <ul class="nav navbar-nav navbar-left">
                <li><a href="#">Overview</a></li>
                <li><a href="#">Friends</a></li>
            </ul>

            <ul class="nav navbar-nav navbar-right">
                <li><a href="#"><span class="glyphicon glyphicon-user"></span> Logged in as: member.user.forename + " " + member.user.surname</a></li>
                <li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Log Out</a></li>
            </ul>
        </div>  
    </nav>
    <div data-role="content">
        <calendar selected="day"></calendar>

    </div>
</div>

javascript

app.controller("member-Ctrl", ["share", function(share)
this.user=share.user;

]);

我需要用户控制器告诉成员控制器新用户的详细信息。

我用谷歌搜索了这个并查看了一个类似问题的答案,这使我找到了This

我创建了一个服务,如视频所示:

app.service("share", function()
    this.user = 

);

现在每当我登录并被重定向到memberHome 页面时,它都会告诉我Logged in as:

谁能明白为什么会这样?

我对 Angular 很陌生,并且正在学习几乎所有我需要的东西。

我应该说我正在使用 jQuery Mobile(用于多页文档)和 Bootstrap 3

【问题讨论】:

这里:***.com/questions/12008908/… 我根据该问题的答案更新了我的服务和控制器,但它不起作用,所以我将console.log() 添加到我添加到服务的功能中。 setUser 函数有效,getUser 函数永远不会被调用....我想我需要一种方法来告诉成员控制器用户对象在服务中发生了变化 【参考方案1】:

您可以使用服务在控制器之间共享信息或使用 $rootScope

var app = angular.module('mymodule',[]);
app.controller('Controller1', ['$scope','$rootScope',
  function($scope, $rootScope) 
    $rootScope.showImages = true;
]);

app.controller('Controller2', ['$scope','$rootScope',
  function($scope, $rootScope) 
    $rootScope.showImages = false;
]);

在模板中:

<div ng-controller="Controller1">
    <div class="images" ng-show="$root.showImages"></div>
</div>

【讨论】:

以上是关于在AngularJS的另一个控制器中更新变量的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS - 工厂变量不会在控制器中更新

AngularJS 控制器可以从同一模块中的另一个控制器继承吗?

如何从AngularJS中的另一个控制器调用函数? [复制]

如何从angularjs中的另一个控制器调用函数

如何在模块化的angularjs范围内测试指令?

如何在其他控制器AngularJS中观察变量