2016-03-16 57 views
1

我目前使用路由器的用戶界面如下父範圍變量: -獲取訪問使用UI路由器

$stateProvider 
    .state('login', { 
    url: '/login' 
    , resolve: loadSequence(
     'base') 
    , templateUrl: 'app/shared/main/login-main.html' 
    , controller: 'mainController' 
    , abstract: true 
}) 
    .state('login.signin', { 
    url: '/signin' 
    , resolve: loadSequence(
     'login-items' 
     , 'spin' 
     , 'ladda' 
     , 'angular-ladda' 
     , '_loginController' 
     ) 
    , templateUrl: "app/components/login/login_login.html" 
    , controller: 'loginController' 
}); 

現在的LoginController我希望能夠在mainController訪問功能。

這有可能與我的當前實現: -

angular.module('app').controller('mainController', function($scope, $state) { 
    $scope.showWarning= function(){ 
     //show warning 
    } 
}); 

angular.module('app').controller('loginController', function($scope, $state) { 
    // I want to access $scope.showWarninghere; 
}); 
+1

是的,你應該只能從loginController引用'$ scope.getData()',但是真的叫'getData()'應該在一個服務中,你可以在需要的時候注入。 – Duncan

+0

我目前正在得到TypeError:$ scope.getData不是一個函數,關於你是對的服務,但getData只是一個例子,對於用詞不當的人抱歉。 – user2327579

+0

我認爲這取決於你的頁面是如何構建的。如果範圍嵌套,則可以訪問它,但嵌套狀態不會強制這樣做。 – Duncan

回答

1

提取getData()方法伸到一個服務,然後你可以把它注射到兩個控制器:

angular.module('app').factory('dataService', function() { 
    return { 
     getData: function() { ... } 
    } 
}); 

angular.module('app').controller('mainController', function($scope, $state, dataService) { 
    // You probably don't need to put this into your scope, but if you do: 
    $scope.getData = dataService.getData.bind(dataService); 
}); 

angular.module('app').controller('loginController', function($scope, $state, dataService) { 
    dataService.getData(); 
}); 

這是要記住有用當您在狀態之間導航時,範圍和控制器會被創建和銷燬,所以實際上想要以多種狀態存在的任何事情確實都希望存儲在服務中。

0

你可以使用angular service這個。

我發現了一個Plunker代碼來解決您的問題

1

至於說鄧肯和桑傑,這可能確實是一個更好的主意,用服務來獲取數據,但我想我會回答原來的問題讓你知道:

正如docs註明外,prototypal inheritance是積極的意見必須嵌套,不僅狀態。

因此,爲了使loginController能夠訪問的mainController範圍內,login-main.html模板必須使用uiView指令(例如<div ui-view></div>),這將是login.signin狀態的login_login.html模板中的佔位符。