首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问$state或$state.current

无法访问$state或$state.current
EN

Stack Overflow用户
提问于 2018-09-28 11:49:03
回答 3查看 277关注 0票数 0

我要设置页面标题,根据路线变化。我是说有反应的头衔。

我的模块中有一个指令:

代码语言:javascript
复制
mainModule.directive("pageTitle", function($state){
return {
    restrict: 'A',
    template: "{{title}}",
    scope: {title: '=title'},
    link: function (scope, elem, attr) {
        scope.title=$state.current.data.title; //wrap this in $watch
        console.log('page state',$state.current.data.title);
    }
  } 
})

在我的main.cshtml中,头标记中有这个标题指令:

代码语言:javascript
复制
<title><page-title title="{{$state.current.data.title}}"></page-title></title>

我的配置文件中有stateProvider:

代码语言:javascript
复制
$stateProvider
        .state('a-management', {
            name: 'aManState',
            url: '/a-management',
            template: '<div license-a permissions = permissions></div>',
            data: {title: 'A Management'}
        })
        .state('b-management/bs', {
            url: '/b-management/bs',
            template: '<b-management current-user = currentUser permissions = permissions></b-management>',
            data: {title: 'B Management'}
        })

我也用了ui-sref-active="active"。一切看起来都很好,但当我运行网站时,这是行不通的。我打开控制台,看看我拥有什么,看起来它可以到达$state (按状态服务),但是它的current属性是空的。

为什么我的代码不能到达当前,所以current.data也是?我错过了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-01 07:29:43

谢谢你的帮助,在这个问题中,巴特勒的回答解决了这个问题。

[使用UI-Router](https://stackoverflow.com/questions/23813599/set-page-title-using-ui-router)设置页面标题

票数 0
EN

Stack Overflow用户

发布于 2018-09-28 13:28:30

我只是要抛出另一个解决方案,您不需要使用指令(可能感兴趣,也可能不感兴趣,但这就是我所做的)。实际上,我有一个run命令,它侦听状态更改,然后根据传入状态的title变量通过根范围更新页面标题。从那里,页面标题(index.html)被绑定到根范围中的标题。

app.js

代码语言:javascript
复制
// Insert code here 
app.run(function ($rootScope) {
    $rootScope.$on('$stateChangeSuccess', function (event, toState) {
        $rootScope.title = toState.title || 'Default Title';
});


// Insert code here
.state('', {
    url: '/',
    title: 'Random Title'
}

index.html

代码语言:javascript
复制
    <head>
    <title ng-bind="title">Default Title</title>
    </head>

希望这是有意义的,并帮助你?

票数 0
EN

Stack Overflow用户

发布于 2018-09-28 13:39:22

使用最新版本的UI-路由器,您可以使用Transition (医生来了)来实现这个结果:

您可以将您的page-title.directive.js编写为:

代码语言:javascript
复制
mainModule.directive("pageTitle", function(){
return {
    restrict: 'A',
    template: "{{title}}",
    scope: {},
    controller: function ($scope, $transitions) {
        $transitions.onSuccess({}, function (transition) {
            //
            $scope.title = transition.to().title; // Your current state's title
        });
    }
  } 
})

你的州定义是:

代码语言:javascript
复制
$stateProvider.state('myState', {
    url: '/',
    title: 'My State Title',
    ...
})

如果不是最后一次获得结果的机会,请尽量避免访问(或在$rootScope上)。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52554710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档