2016-03-16 63 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模板中的占位符。