赞
踩
由于 ionic 1.x 是使用的 ui-router,因此我这里也是重点学习了ui-router
<script src="../public/js/angular.min.js"></script>
<script src="../public/js/angular-ui-router.min.js"></script>
//定义模板,并注入ui-router
var app = angular.module('myApp', ['ui.router'])
<div ng-app="myApp">
<div ui-view></div>
</div>
//定义模板,并注入ui-router var app = angular.module('myApp', ['ui.router']) //定义路由----对服务进行参数初始化,这里配stateProvider服务的视图控制 app.config([ '$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise("/students"); //这条是相当于报错的时候跳转 $stateProvider .state('login', { url: '/login', // template: './module/main/mainTemplate.html', templateUrl: './module/login/loginTemplate.html', controller: 'LoginController' }) .state('main', { url: '/main', // template: './module/main/mainTemplate.html', templateUrl: './module/main/mainTemplate.html', controller: 'MainController' }) }, ])
我们在经常在页面中发现,其中页面某个部分不会发生变化,当地址变化,只是其中某个部分发生变化,像一个模板一样,例如“后台管理”的典型页面,左边是菜单,右边是内容
//定义模板,并注入ui-router var app = angular.module('myApp', ['ui.router']) //定义路由----对服务进行参数初始化,这里配stateProvider服务的视图控制 app.config([ '$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/login') //这条是相当于报错的时候跳转 $stateProvider .state('login', { url: '/login', // template: './module/main/mainTemplate.html', templateUrl: './module/login/loginTemplate.html', controller: 'LoginController', }) .state('main', { url: '/main', // template: './module/main/mainTemplate.html', templateUrl: './module/main/mainTemplate.html', controller: 'MainController', }) .state('main.students', { url: '/students', templateUrl: './module/main/students/studentsTemplate.html', controller: 'studentsController', }) }, ])
‘main.students’ 是 ‘main’ 的子状态
'main’将匹配…/index.html#/main;
'main.students’将匹配…/index.html#/students。
<div>
<div>
mainTemplate --- {{firstName}} --- {{lastName}}
</div>
<div>
<a ui-sref="login">login</a>
<a ui-sref="main.students">main.student</a>
</div>
<div ng-click="myClickAction('huangbiao')">
<button>点击按钮事件</button>
</div>
<div>{{ '' | NodataFilter}}</div>
<div ui-view></div>
</div>
例如我们查看新闻详情,除了新闻内容不一样,所有的布局样式完全一样,因此我们使用动态路由修改
在url配置中,使用:变量名
或者 {变量名}
的方式定义动态参数
url: ‘/index/:id’,和url: ‘/index/{id}’,两种形式传参
//定义模板,并注入ui-router var app = angular.module('myApp', ['ui.router']) //定义路由----对服务进行参数初始化,这里配stateProvider服务的视图控制 app.config([ '$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/login') //这条是相当于报错的时候跳转 $stateProvider .state('login', { url: '/login', // template: './module/main/mainTemplate.html', templateUrl: './module/login/loginTemplate.html', controller: 'LoginController', }) .state('main.myinfo', { url: '/myinfo/:username/{age}', templateUrl: './module/main/myinfo/myinfoTemplate.html', controller: 'myinfoController' }) }, ])
$state.go
跳转页面并传递参数app.controller('LoginController', ['$scope', '$state', function($scope, $state) { $scope.firstName = "John"; $scope.lastName = "Doe"; $scope.goHomePage = function () { console.log(this === $scope) debugger console.log($state) var paramObj = { username: 'huangbiao', age: 18 } debugger $state.go('main.myinfo', paramObj) // 根据路由名字,跳转到对应的路由界面 } }]);
这里的参数的key值一定要与前面配置的url的变量保持一致,否则无法获取参数
ui-sref
传递参数<a ui-sref="main.myinfo({
username: 'huangbiao',
age: 18
})">传递参数跳转</a>
$stateParams
获取参数值app.controller('myinfoController', [
'$scope', '$state', '$stateParams', '$http',
function ($scope, $state, $stateParams, $http) {
console.log($stateParams)
console.log($state)
},
])
在路由配置中添加 onEnter 和 onExit
//定义模板,并注入ui-router var app = angular.module('myApp', ['ui.router']) //定义路由----对服务进行参数初始化,这里配stateProvider服务的视图控制 app.config([ '$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/login') //这条是相当于报错的时候跳转 $stateProvider .state('login', { url: '/login', // template: './module/main/mainTemplate.html', templateUrl: './module/login/loginTemplate.html', controller: 'LoginController', }) .state('main.myinfo', { url: '/myinfo/:username/{age}', templateUrl: './module/main/myinfo/myinfoTemplate.html', controller: 'myinfoController', //进入页面触发的方法 onEnter: function () { console.log('main.myinfo onEnter') debugger }, //离开页面触发的方法 onExit: function () { console.log('main.myinfo onExit') debugger }, }) }, ])
在点击事件的方法中, this 和 $scope 是同一个对象
$scope.addAddress = function () {
console.log(this === $scope)
alert(this.addAddress);
$state.go('setting_add_address');
};
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。