AngularJS中locationchange、routechange事件

原创 2013年12月03日 16:51:15

假设有这样一场景:在用户切换到另外一个route时,需要检查当前表单(内容)是否已保存?考虑下在AngularJS中如何实现?


我们首先来分析下,场景中有那些事件流。

①:用户编辑了表单

②:用户准备点击另外一个route url,触发提示‘是否要保存’

③:点击‘是’,route切换事件停止;点击‘否’,route切换事件继续


主要流程就这些其实很简单。这里主要涉及到了AngularJS中的事件处理模块。


首先我们需要知道的是$locationChangeStart和$routeChangeStart哪个事件先触发。

$route is used for deep-linking URLs to controllers and views (HTML partials). It watches $location.url() and tries to map the path to an existing route definition.

route是监控location.url的,然后采取操作的。所以事件的触发应该是先location后route事件


var app = angular.module('myApp', ['ngRoute']);

//
app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.when('/view1', {
        templateUrl: 'view1.html'
    }).when('/view2', {
            templateUrl: 'view2.html'
        }).otherwise({redirectTo: '/view1'});
}]);

app.run(['$rootScope', '$window', '$location', '$log', function ($rootScope, $window, $location, $log) {
    var locationChangeStartOff = $rootScope.$on('$locationChangeStart', locationChangeStart);
    var locationChangeSuccessOff = $rootScope.$on('$locationChangeSuccess', locationChangeSuccess);

    var routeChangeStartOff = $rootScope.$on('$routeChangeStart', routeChangeStart);
    var routeChangeSuccessOff = $rootScope.$on('$routeChangeSuccess', routeChangeSuccess);

    function locationChangeStart(event) {
        $log.log('locationChangeStart');
        $log.log(arguments);
    }

    function locationChangeSuccess(event) {
        $log.log('locationChangeSuccess');
        $log.log(arguments);
    }

    function routeChangeStart(event) {
        $log.log('routeChangeStart');
        $log.log(arguments);
    }

    function routeChangeSuccess(event) {
        $log.log('routeChangeSuccess');
        $log.log(arguments);
    }
}]);
运行结果:



这个其实框架原型已经出现了


我们只需要处理 locationChangeStart,这里给出部分实现:

function locationChangeStart(event, newUrl) {
        $log.log('locationChangeStart');
        $log.log(arguments);

        var ret = $window.confirm('Are you sure to give it up? ');
        if (ret) {
            locationChangeStartOff(); //Stop listening for location changes or you can do others
            $location.path(newUrl);
            return;
        }
        event.preventDefault();
        return;
    }


好的,我们来总结下:

我们利用location改变事件来实现了在提交Location之前做了定制化,除了location事件,还有route事件,利用route事件我们可以做‘loading..’效果。




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

路线更改事件 $ROUTECHANGESTART 与 $LOCATIONCHANGESTART

转自:http://www.cnblogs.com/jintaostudy/p/6236948.html $routeChangeStart属于$route模块,使用将要改变的路由和当前路由...

angular之$location基本用法

一. 获取url的相关方法: 以 'http://localhost/$location/21.1%20$location.html#/foo?name=bunny#myhash' 这个路径为例...

angularJs-route路由详解

本篇基于ng-route来讲下angular中的路由,路由功能主要是 $routeProvider服务 与 ng-view 实现。 ng-view的实现原理,是根据路由的切换,动态编译html模板—...

angularjs 路由回退,返回到上一个路由

在现阶段比较流行的angularjs框架中;路由是一个比较重要的应用;angularjs的单页面是其强大功能之一; 所有的页面其实就只是在一个页面就实现的:angularjs通过对路由的控制来进行页面...

angularJS系列之监听路由变化$location和$route实例

直接上代码 //增加路由跳转时的判断,如果是同一个页面重新刷新,则让其跳转到相应的页面。 app.run(['$rootScope', '$window', '$location',...

Angular 监听路由变化

Angular 路由状态发生改变时可以通过'$stateChangeStart'、'$stateChangeSuccess'、'$stateChangeError' 监听,通过注入'$location...

$stateChangeStart状态改变事件及参数说明

我初入angularjs,公司只有我一个前端,遇到过许多的坑,主要原因还是对angularjs的很多东西不熟悉,这次就让我来说说$stateChangeStart事件吧,大家共勉 http://www...

ngRoute路由改变监听事件(1)+ui.router状态路由

1.1、路由改变监听事件(1) 1、$routeChangeStart:路由开始切换 2、$routeChangeSuccess:路由切换成功 3、$routeChangeErr...

AngularJs ng-change事件/指令

定义和用法 ng-change 指令用于告诉 AngularJS 在 HTML 元素值改变时需要执行的操作。 ng-change 指令需要搭配 ng-model 指令使用。 An...

JS自定义事件绑定--通过URL触发不同的点击事件

今天,遇到了这样一个问题,通过超链接的跳转到不同的页面,然后通过URL的不同的参数,来触发相应的事件 先看看dome.html的超链接部分: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AngularJS中locationchange、routechange事件
举报原因:
原因补充:

(最多只允许输入30个字)