Javascript AngularJS-UI路由-如何在控制器中将路由状态用作变量?
我正在使用Angular JS和UI路由。路由工作正常。我的问题是根据用户所在的页面显示和隐藏滑块 My index.html的外观如下所示:Javascript AngularJS-UI路由-如何在控制器中将路由状态用作变量?,javascript,jquery,angularjs,angularjs-scope,angular-ui-router,Javascript,Jquery,Angularjs,Angularjs Scope,Angular Ui Router,我正在使用Angular JS和UI路由。路由工作正常。我的问题是根据用户所在的页面显示和隐藏滑块 My index.html的外观如下所示: <body ng-app="myApp"> <header ng-include="'templates/header.html'"></header> <div>Code for slider</div> <!--=== Content Part ===--> <div
<body ng-app="myApp">
<header ng-include="'templates/header.html'"></header>
<div>Code for slider</div>
<!--=== Content Part ===-->
<div class="container">
<div class="row" >
<div ui-view autoscroll="false"></div>
</div>
</div><!--/container-->
<!-- End Content Part -->
<footer ng-include="'templates/footer.html'"></footer>
angular
.module('myApp', ['ui.router'])
.config(['$urlRouterProvider','$stateProvider',function($urlRouterProvider,$stateProvider){
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home',{
url: '/',
templateUrl: 'templates/home.html'
})
.state('about',{
url: '/about',
templateUrl: 'templates/about.html'
})
.state('contact',{
url: '/contact',
template: 'CONTACT'
})
}])
.controller()
现在我尝试将滑块包含在home.html模板中,但由于初始化要求,滑块无法正常工作。当我在不同的路由中使用控制器时,它超出了范围。那么,我如何将一个引用状态的变量传递给一个独立于路由的控制器,这样我就可以对它进行类似的操作
if (state==home) {
$scope.showSlider==true;
}else{ $scope.showSlider==false;}
谢谢
格尔德
更新:
@克里斯·T
我已将此添加到我的app.js中:
.controller('myController',['$scope', '$state', function($scope,$state){
if ($state.includes('home')){
$scope.showIt=true;
}else{
$scope.showIt=false;
}
}])
然后我将控制器应用到一个div上,我将其缠绕在滑块上并使用它
ng-show="showIt"
将$state注入控制器。然后检查
$state.includes(“home”)代码>
更新:
我使用父状态创建了一个plunk,该父状态基于$state.includes('main.home')控制滑块的启用/禁用
谢谢Chris,我成功了,但只在ui路由的.config中。。。然后在HTML中的滑块部分之外有一个控制器和一个作用域。。。当我试图创建一个新的控制器并在ui路由器配置之外传入$state时,我遇到了一个错误。关于可能出现的错误或我如何将结果传递给其他控制器的任何建议?您能告诉我您是如何创建控制器和注入$state的吗?我已将控制器添加为原始问题的更新。感谢您的帮助!我现在更明白这个问题了。你有两个选择。滑块在控制器上下文之外运行。您可以直接将逻辑嵌入到标记中,使用$rootScope访问$state(meh):或者您可以创建一个父状态(更好)并使用一个控制器。直接添加到主页(index.html)的.js和.css被添加到全局范围(窗口)中,并且应该可以在ui路由器视图中使用。滑块和youtube控件是否需要运行javascript才能初始化它们?如果是这样,您可能需要将初始化代码放在适当的位置。例如,您可能希望将init代码包装在指令中。