GVKun编程网logo

AngularJS转到状态而不重新加载并且没有值的参数(angularjs页面加载后再执行)

9

关于AngularJS转到状态而不重新加载并且没有值的参数和angularjs页面加载后再执行的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于angularui-router:当路径参数更

关于AngularJS转到状态而不重新加载并且没有值的参数angularjs页面加载后再执行的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?、Angular2 Router 2.0.0是否在相同的URL加载了不同的参数时不重新加载组件?、AngularJS UI路由器 – 更改url没有重新加载状态、AngularJS UI路由器$state仅重新加载子状态等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

AngularJS转到状态而不重新加载并且没有值的参数(angularjs页面加载后再执行)

AngularJS转到状态而不重新加载并且没有值的参数(angularjs页面加载后再执行)

在我的应用程序中,我有一个指令,它查看$location.search()以决定是否应该显示该指令.
代码看起来有点像这样:

function refresh(stateName) {
    var hideSplash = $location.search().nosplash;

    if (hideSplash === true) {
        model.hide = true;
    } else {
        var templateUrl = getTemplateUrl(stateName);
        if (templateUrl && viewed.indexOf(templateUrl) === -1) {
            viewed.push(templateUrl);
            model.templateUrl = templateUrl;
            model.hide = false;
            model.finished = false;
        }
    }
};

这就像一个魅力.正如你所知,在这种情况下,如果nosplash有一个值并不重要,它只需要预设.
就我而言,路径如下所示:

/摄像头/结果?NOSPLASH

在那条特定的路线上,我把它定义为:

angular.module('widget.wizard')
    .config(pickRoutes);

function pickRoutes($stateProvider) {

    $stateProvider
        .state('home.category.results',configurePickRoute());

    function configurePickRoute() {
        return {
            url: '/results?expanded',reloadOnSearch: false,views: {
                '': {
                    templateUrl: 'scripts/results/results.html',controller: 'ResultsController',controllerAs: 'controller'
                }
            },resolve: {
                bypass: bypassRegistration
            },data: {
                pageTitle: 'Your PiiiCKs'
            }
        };
    };

    //////////////////////////////////////////////////

    /* @ngInject */
    function bypassRegistration($location,pkRegisterService) {
        if (!pkRegisterService.options.bypass) // Checks to see if has been set elsewhere
            pkRegisterService.options.bypass = $location.search().bypass;
    };
};

如您所见,我希望它扩展一个查询参数.目前,我的控制器有:

self.expanded = $stateParams.expanded;

//////////////////////////////////////////////////

function expand() {
    self.expanded = true;
    $state.go('home.category.results',{ expanded: true });
};

在我看来,我有这个HTML:

<divng-if="controller.picks">
    <div>
        <div>
            <div>
                <buttonng-click="controller.expand()" ng-if="!controller.expanded">See your other matches</button>
            </div>
        </div>
    </div>
</div>

<divng-if="controller.expanded">
    <div>
        <div>
            <div>
                <h2>Your other matches</h2>
            </div>
        </div>
    </div>
    <divpk-product="product" pk-category="controller.category" ng-repeat="product in controller.notPicked"></div>
</div>

如您所见,如果展开的属性为true,则隐藏按钮并显示“其他匹配”.
这确实有效,但网址看起来像这样:

/cameras/results?expanded=true

我希望它看起来像这样:

/cameras/results?expanded

有没有办法可以做到这一点,但仍然有reloadOnSearch:false?

解决方法

请试试这个:

网址配置:

url: '/results/:params?'

获得价值:

var params = JSON.parse($stateParams["params"]);
console.log(params.expanded);

去州:

$state.go('home.category.results',{ expanded: true });

angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?

angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?

例如,我希望此导航更改可重新加载状态:

  • #/detail/1
  • #/detail/2

但我不希望此导航重新加载状态:

  • #/detail/1?search=blah
  • #/detail/1?search=huzzah

根据ui-router文档,设置reloadOnSearch: false应可完成此操作,但请尝试以下操作。当reloadOnSearch ===false为时,即使文档说应该更改路径参数,它也不会重新加载状态。

Plunkr:http:
//run.plnkr.co/ZPy9uabYlkMilwdS/#/param

答案1

小编典典

这是UI-Router中的错误,已在0.2.15版中修复:

https://github.com/angular-ui/ui-router/releases

升级到最新版本将解决此问题

Angular2 Router 2.0.0是否在相同的URL加载了不同的参数时不重新加载组件?

Angular2 Router 2.0.0是否在相同的URL加载了不同的参数时不重新加载组件?

我的.routing.ts文件中有这个

export const routing = RouterModule.forChild([
{
    path: 'page/:id',component: PageComponent
}]);

我的PageComponent文件检查id参数并相应地加载数据。在路由器的早期版本中,如果我从/ page / 4转到/ page /
25,则该页面将“重新加载”并且组件将更新。

现在,当我尝试导航到/ page / X时,其中X是id,它只会第一次加载,然后url会更改,但是组件不会再次“重新加载”。

是否需要传递某些内容以强制重新加载组件并调用ngOnInit事件?

AngularJS UI路由器 – 更改url没有重新加载状态

AngularJS UI路由器 – 更改url没有重新加载状态

目前我们的项目使用默认$ routeProvider,我使用这个“hack”,更改url而不重新加载页面:
services.service('$locationEx',['$location','$route','$rootScope',function($location,$route,$rootScope) {
    $location.skipReload = function () {
        var lastRoute = $route.current;
        var un = $rootScope.$on('$locationChangeSuccess',function () {
            $route.current = lastRoute;
            un();
        });
        return $location;
    };
    return $location;
}]);

和控制器

$locationEx.skipReload().path("/category/" + $scope.model.id).replace();

我正在考虑用ui-router替换routeProvider用于嵌套路由,但是在ui-router中找不到。

是可能的 – 对angular-ui路由器做同样吗?

为什么我需要这个?
让我用一个例子解释:
创建新类别的路径是/ category / new
单击保存我显示成功警报,我想要更改路线/类别/新到/ caterogy / 23(23 – 是存储在db中的新项目的ID)

简单地说,你可以使用$ state.transitionTo而不是$ state.go。 $ state.go在内部调用$ state.transitionTo,但自动将选项设置为{location:true,inherit:true,relative:$ state。$ current,notify:true}。您可以调用$ state.transitionTo并设置位置:false。例如:
$state.go('.detail',{id: newId})

可以替换

$state.transitionTo('.detail',{id: newId},{
    location: true,inherit: true,relative: $state.$current,notify: false
})

编辑:如fracz建议,它可以简单地是:

$state.go('.detail',{notify: false})

AngularJS UI路由器$state仅重新加载子状态

AngularJS UI路由器$state仅重新加载子状态

我正在使用UI路由器作为主菜单的选项卡以及其中一个状态(用户)中的链接。用户状态有用户列表,当用户点击时,我想重新加载子状态,但是它正在重新加载子状态和父状态(用户)。

这是我的代码:

app.config(function ($stateProvider,$locationProvider,$urlRouterProvider) {
    $urlRouterProvider.otherwise("/");
    $locationProvider.html5Mode(true);
    $stateProvider
        .state('home',{
            abstract: true,template: '<div ui-view=""></div>',controller: 'HomeController as homeCtrl'
        })
        .state('users',{
            parent: 'home',url: '/users',templateUrl: '/User/Index',controller: 'UserController as userCtrl',})
        .state('users.createuser',{
            templateUrl: '/User/createuser',controller: 'createuserController as cuCtrl'
        })
        .state('users.editUser',{
            templateUrl: '/User/EditUser',controller: 'EditUserController as euCtrl',resolve: {
                userInfo: function (contextInfo,userData) {
                    return userData.get(contextInfo.getUserKey());
                }
            }
        })
        .state('users.addWebItemsForUser',{
            templateUrl: '/User/AddWebItemsForUser',controller: 'UserWebItemsController as uwiCtrl'
        })
        .state('users.addReportsForUser',{
            templateUrl: '/User/AddReportsForUser',controller: 'UserReportsController as urCtrl'
        })
        .state('users.userGroups',{
            templateUrl: '/User/UserGroups',controller: 'UserGroupController as userGroupCtrl'
        })
        //.state('users.logInWebApp',{
        //    template: '<h3>Logging into web app</h3>',//    resolve: {
        //        user: function() {
        //            return {
        //                //companyId: contextInfo.getCustomerKey()
        //                //userId:
        //                //password:
        //            }
        //        }
        //    },//    controller: function() {
        //        // need company code,username and password of user then need to open window with webapp url (will that work?) - do we still want to add this functionality?
        //    }
        //})
        .state('links',{
            url: '/links',templateUrl: '/Link/Index',controller: 'LinkController as linkCtrl'
        })
        .state('onlrpts',{
            url: '/onlineReports',templateUrl: '/OnlineReport/Index',controller: 'OnlineReportController as onlRptCtrl'
        })
        .state('reports',{
            url: '/customerReports',templateUrl: '/CustomerReport/Index',controller: 'CustomerReportController as custRptCtrl'
        });
})
.config(function($provide) {
    $provide.decorator('$state',function($delegate,$stateParams) {
        $delegate.forceReload = function() {
            return $delegate.go($delegate.$current.name,$stateParams,{
                reload: true,inherit: false,notify: true
            });
        };
        return $delegate;
    });
});

这是在我的父控制器(UserController)中,当用户被点击时调用的函数:

this.userTreeClick = function(e) {
        contextInfo.setUserKey(e.Key);
        contextInfo.setUserName(e.Value);
        userCtrl.userKey = e.Key;
        $state.forceReload();
    };

所以说我在users.userGroups状态,当我点击另一个用户,我只想要users.userGroups状态被重新加载。这可能吗?我已经通过谷歌和StackOverflow找到了一个答案,但我没有发现任何与我正在尝试的东西完全一样。当我断开检查$状态$ current.name – 名称是正确的 – users.userGroups,但它重新加载所有,而不仅仅是子状态。任何帮助非常感谢!

如API Reference所述,我们可以使用$ state.reload:

07000

A method that force reloads the current state. All resolves are
re-resolved,controllers reinstantiated,and events re-fired.

Parameters:

  • state (optional)
    • A state name or a state object,which is the root of the resolves to be re-resolved.

一个例子:

//will reload 'contact.detail' and 'contact.detail.item' states
$state.reload('contact.detail');

类似的,我们可以用$ state.go()和它的options参数来实现:

07001

  • options (optional)
    • location
    • inherit
    • relative
    • notify
    • reload (v0.2.5) – {boolean=false|string|object},If true will force transition even if no state or params have changed. It will
      reload the resolves and views of the current state and parent states.
      If reload is a string (or state object),the state object is fetched (by name,or object reference); and \ the transition reloads the
      resolves and views for that matched state,and all its children
      states.

例如https://github.com/angular-ui/ui-router/issues/1612#issuecomment-77757224 by Chris T:

{ reload: true } // reloads all,{ reload: 'foo.bar' } // reloads top.bar,and any children
{ reload: stateObj } // reloads state found in stateObj,and any children

一个例子

$state.go('contact',{...},{reload: 'contact.detail'});

我们今天的关于AngularJS转到状态而不重新加载并且没有值的参数angularjs页面加载后再执行的分享就到这里,谢谢您的阅读,如果想了解更多关于angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?、Angular2 Router 2.0.0是否在相同的URL加载了不同的参数时不重新加载组件?、AngularJS UI路由器 – 更改url没有重新加载状态、AngularJS UI路由器$state仅重新加载子状态的相关信息,可以在本站进行搜索。

本文标签: