ui-router不改变地址栏中的url

时间:2014-04-27 16:36:23

标签: javascript angularjs angular-ui-router

当我点击电子邮件按钮时,它应该加载电子邮件页面并将网址更改为/emails。 单击文本按钮时,应加载文本页面并将URL更改为/texts

虽然电子邮件工作正常但实际上发生了什么,但是当我点击文本按钮时,正确的ctrl和视图被加载并且工作但是我的地址栏保留了我所在的最后一个URL而不是更改为文本URL。 / p>

我的应用程序工作正常,但我不知道是什么导致了这一点。

当我手动输入网址并按下输入正确的视图并按预期加载ctrl时,但当我点击另一个链接然后单击文本链接时,我的地址栏中仍有最后一个网址。

GOOD enter image description here

网址错误,应该有/textsenter image description here

电子邮件模块代码

/emails/emails.js

angular.module('rmc.contact.emails', [
    'rmc.contact.emails.create',
    'rmc.contact.emails.edit',
    'rmc.contact.emails.preview',
    'rmc.contact.emails.view'
])

    .config(['$stateProvider', function($stateProvider) {
        $stateProvider
            .state('rmc.contact.emails', {
                url: '/emails',
                controller: 'EmailsCtrl',
                templateUrl: '/apps/rmc/contact/emails/emails.tpl.html'
            });
    }])

/emails/create/create.js

angular.module('rmc.contact.emails.create', [])

    .config(['$stateProvider', function($stateProvider) {
        $stateProvider
            .state('rmc.contact.emails.create', {
                url: '/create?cardId',
                controller: 'EmailsCreateCtrl',
                templateUrl: '/apps/rmc/contact/emails/create/create.tpl.html'
            });
    }])

文本模块代码

/contact/texts/texts.js

angular.module('rmc.contact.texts', [
    'rmc.contact.texts.create',
    'rmc.contact.texts.edit',
    'rmc.contact.texts.preview',
    'rmc.contact.texts.view'
])

    .config(['$stateProvider', function($stateProvider) {
        $stateProvider
            .state('rmc.contact.texts', {
                url: '/texts',
                controller: 'TextsCtrl',
                templateUrl: '/apps/rmc/contact/texts/texts.tpl.html'
            });
    }])

/contact/texts/create/create.js

angular.module('rmc.contact.texts.create', [])

    .config(['$stateProvider', function($stateProvider) {
        $stateProvider
            .state('rmc.contact.texts.create', {
                url: '/create',
                controller: 'TextsCreateCtrl',
                templateUrl: '/apps/rmc/contact/texts/create/create.tpl.html'
            });
    }])

菜单链接

/contact/contact.tpl.html

    <div class='three-full-btns'>
        <a ui-sref='rmc.contact.calls.create({ cardId: 0 })' ng-if="hasPermission('rmc.calls')" title='Calls' class='btn'>
            <i class='icon-phone'></i>
        </a>

        <a ui-sref='rmc.contact.emails.create({ cardId: 0 })' ng-if="hasPermission('rmc.emails')" title='Emails' class='btn'>
            <i class='icon-envelope'></i>
        </a>

        <a ui-sref='rmc.contact.texts.create' ng-if="hasPermission('rmc.texts')" title='Texts' class='btn'>
            <i class='icon-mobile-phone'></i>
        </a>
    </div>

    <div class='three-full-btns'>
        <a ui-sref='rmc.contact.systems.create({ cardId: 0 })' title='Systems' ng-if="hasPermission('rmc.systems')" class='btn'>
            <i class='icon-ok'></i>
        </a>

        <a ui-sref='rmc.contact.forms.create({ cardId: "" })' ng-if="hasPermission('rmc.forms')" title='Forms' class='btn'>
            <i class='icon-file-text'></i>
        </a>

        <a ui-sref='rmc.contact.columns.view({ cardId: "" })' ng-if="hasPermission('rmc.columns')" title='Column Forms' class='btn'>
            <i class='icon-columns'></i>
        </a>
    </div>

3 个答案:

答案 0 :(得分:2)

在控制器中查找$state.go(),它会将您发送到状态加载后您已经处于状态的状态。这样做会导致您看到的行为。

答案 1 :(得分:0)

我认为你应该在测试路由中明确声明params,否则ui-router不会查看param

 url: '/texts?cardId'

https://github.com/angular-ui/ui-router/wiki/URL-Routing#important-stateparams-gotcha

答案 2 :(得分:0)

这里可能有问题:

<a ui-sref='rmc.contact.texts.create({ cardId: 0 })'

...

url: '/create',

你错过了吗?cardId