【问题标题】:Call one controller under another controller in angularjs在angularjs中调用另一个控制器下的一个控制器
【发布时间】:2016-09-05 12:43:52
【问题描述】:

我想在 LoginController 下调用 Homecontroller。以下是两个控制器的代码:

//Login controller
    app.controller('LoginController', function ($scope, $cookieStore) {
        $cookieStore.put('email','test@gmail.com');
        // need to call Homecontroller here
    });

// Home controller
app.controller('HomeController', function ($scope, $cookieStore, $location) {


      if ($cookieStore.get('email') != null) {
            $scope.wecomeMessage = $cookieStore.get('email');
        }
        else
        {
            $scope.wecomeMessage = "";
        }
    });

【问题讨论】:

    标签: angularjs controller emit


    【解决方案1】:

    我认为您误解了 Angular 控制器的责任。

    如何使用 Angular 文档中的控制器:

    使用控制器来:

    • 设置 $scope 对象的初始状态。

    • 向 $scope 对象添加行为。

    不要使用控制器来:

    • 操纵 DOM - 控制器应仅包含业务逻辑。
    • 将任何表示逻辑放入控制器会显着影响 它的可测试性。
    • Angular 对大多数情况和指令都有数据绑定 封装手动 DOM 操作。
    • 格式输入 - 使用角度 而是表单控件。
    • 过滤器输出 - 改用角度过滤器。
    • 在控制器之间共享代码或状态 - 改用 Angular 服务。
    • 管理其他组件的生命周期(例如,创建 服务实例)。

    因此,如果您想创建一些可重用的代码块,您只需要创建一个角度服务,该服务将包含具有所需逻辑的功能。然后您可以将其注入到两个控制器中,它们将具有必要的功能。

    示例:

    app.controller('LoginController', function ($scope, $cookieStore, helperService) {
        $cookieStore.put('email', 'test@gmail.com');
    
        $scope.wecomeMessage = helperService.getMessage();
    
    });
    
    // Home controller
    app.controller('HomeController', function ($scope, $cookieStore, $location, helperService) {
    
        $scope.wecomeMessage = helperService.getMessage();
     });
    
    
    app.service('helperService', function ($cookieStore) {
    
        this.getMessage = function () {
            return $cookieStore.get('email') != null ? $cookieStore.get('email') : "";
        };
    
    });
    

    【讨论】:

    • 好的,谢谢,但在上面的程序中,我只需要更新基于$cookieStore.get('email')$scope.wecomeMessage ,它不依赖于任何服务。问题是更新欢迎消息$scope.wecomeMessage
    • 据我了解,您想在两个控制器中更新 $scope.welcomeMessage 取决于 `$cookieStore.get('email') 内部的内容,是吗?
    • 是正确的....我遵循您上面的代码,但问题是两个控制器都有不同的页面(第一个是 Login.html,第二个是标题 Layout.html 的部分布局)..之后登录它正在更新 wecome 消息但未显示,当我刷新页面时它显示....
    • @SamirRawat,没有 plunker 无法解决您的问题,但您似乎在谈论刷新后显示的 Home Controller 的欢迎。如果是,那么是因为你在 Login 控制器中设置了$cookie,而在创建 Home 控制器的消息时它并不存在。您也可以将此行$cookieStore.put('email', 'test@gmail.com'); 移动到服务中,它可以解决您的问题。如果问题不同,请提供给我 plunker,以便我可以帮助您!
    • @SamirRawat,点击时主页和登录显示未找到,请修复该问题,我会帮助您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多