在angularjs中调用另一个控制器下的一个控制器

时间:2016-09-05 12:43:52

标签: angularjs controller emit

我想在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 = "";
        }
    });

1 个答案:

答案 0 :(得分:0)

我认为你误解了角度控制器的责任。

如何使用angular docs中的控制器:

  

使用控制器:

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

  •   
  • 向$ scope对象添加行为。

  •   
     

请勿使用控制器:

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

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

示例:

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') : "";
    };

});