2017-08-04 38 views
0

我試圖實現一個登錄功能,將有效用戶重定向到以其名稱歡迎他們的個性化HTML視圖。在第二個視圖中使用相同的角度控制器無法識別的作用域變量

我的第一個視圖是一個登錄視圖。當用戶點擊標記爲「登錄」的按鈕ng-click應該打電話給我的控制器的$scope.login這應該驗證用戶,設置$scope.needsLoggingIn變量,並重定向到第二個視圖(顯示值$scope.needsLoggingIn的歡迎頁面)。

我的問題是,當我嘗試在$scope.login函數中設置它時,第二個視圖(使用相同的角度控制器和模塊)不顯示$scope.needsLoggingIn變量。這隻能說明,當我硬編碼值這樣的控制器,範圍功能外$scope.needsLoggingIn

$scope.needsLoggingIn = "Betty"; 

這是在我的控制器的$scope.login功能,試圖設置在$scope.needsLogging,並在被接受第一種觀點,但不被第二視圖接受:

$scope.login = function (username, password) { 
    $http({ 
     method: 'GET', 
     url: ('/login/' + username + '/' + password) 
    }).then(function successCallback(response) { 
     if (JSON.stringify(response.data) === '[]') 
     { 
      $scope.needsPasswordMessage = true; 
      if ($scope.needsPasswordMessage) 
       $scope.needsPasswordMessage = false; 
      console.log("No match"); 
     } else { 
      $scope.needsLoggingIn = username; 
      $scope.issuccessMessage = true; 
      if ($scope.isfailureMessage) 
       $scope.isfailureMessage = false; 
      $window.location.href = '../indextest.html'; 
      return response; 
     } 
    }, function errorCallback(response) { 
    }); 
}; 

沒有人有任何建議,我怎麼可以讓我$scope.needsLoggingIn雙方HTML視圖的認可,沒有硬編碼到控制器?我真的希望能夠讓我的$scope.login函數設置變量值,並讓它可以被使用這個特定控制器的所有視圖識別。

+1

把它放在$ rootScope中,所有的作用域都繼承它。其他東西...我不認爲用** GET **方法登錄請求是一個好主意'url:('/ login /'+ username +'/'+ password)' – codtex

+0

謝謝!很抱歉,如果這是一個愚蠢的問題,但所有視圖都有自己的範圍,即使他們使用相同的控制器? – ChristinaLindsay

+0

閱讀[** this **](https://docs.angularjs.org/guide/scope)有關範圍和[** this **](https://docs.angularjs.org/api/ ng/service/$ rootScope)關於$ rootScope。基本上,作用域是根據控制器實例或指令或其他地方創建的,但是'$ scope'與控制器的關係比查看 – codtex

回答

0

您希望跨不同視圖和控制器實例生活的數據應通過服務處理。

基本上你將創建一個服務是這樣的:

function userService($http) { 
    let service = {} 
    service.needsLoggingIn = "" 
    service.login = login 

    return service 

    function login() { 
     return $http.... (your login code) 
    } 
} 

然後注入服務到你的控制,設置屬性爲適當,因爲服務是單例,這些屬性值將是隨處可你注入服務。

相關問題