2016-09-05 154 views
0

我想在LoginController下調用Homecontroller。下面是兩個控制器的代碼:在angularjs中調用另一個控制器下的一個控制器

//Login controller 
    app.controller('LoginController', function ($scope, $cookieStore) { 
     $cookieStore.put('email','[email protected]'); 
     // 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 = ""; 
     } 
    }); 

回答

0

我想你錯誤地理解了角度控制器的責任。

如何使用控制器從角文檔:

使用控制器:

  • 搭建$範圍對象的初始狀態。

  • 將行爲添加到$ scope對象。

不要使用控制器:

  • 操作DOM - 控制器應該只包含業務邏輯。
  • 將任何表示邏輯放入控制器中,會顯着影響其可測試性 。
  • Angular對大多數情況都有數據綁定,指令 用於封裝手動DOM操作。
  • 格式輸入 - 改用角度 表單控件。
  • 過濾器輸出 - 改用角度過濾器。
  • 跨控制器共享代碼或狀態 - 改用角度服務。
  • 管理其他組件的生命週期(例如,創建 服務實例)。

所以,如果你想創建可重用的代碼塊一些,你只需要創建一個角度的服務,其中包括與所需的邏輯功能。然後你可以將它注入兩個控制器,它們將具有必要的功能。

例子:

app.controller('LoginController', function ($scope, $cookieStore, helperService) { 
    $cookieStore.put('email', '[email protected]'); 

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

}); 
+0

好,謝謝,但在上面的程序我只需要更新'$'scope.wecomeMessage這是在'$ cookieStore.get( '電子郵件')基地'和它的不依賴於任何服務。問題是更新歡迎消息'$ scope.wecomeMessage' –

+0

正如我所理解的,你想在兩個控制器中更新'$ scope.welcomeMessage'取決於$ cookieStore.get('email')裏面的內容,是的? – Mikki

+0

是的正確....我遵循你的上述代碼,但問題是兩個控制器都有不同的頁面(第一個是Login.html,第二個是部分佈局的頭部Layout.html)..登錄後,它正在更新wecome消息,但沒有顯示,當我刷新頁面,然後顯示.... –

相關問題