angular路由與ng-options/ng-include指令
阿新 • • 發佈:2018-12-30
ng-options下拉列表指令
ng-options="fruit.name for fruit in main.fruitArr"
fruit 是通過遍歷 main.fruitArr 取出的每一個物件
fruit.name 是取出 fruit物件中的 name屬性值
注意: ng-options指令需要與ng-model同時使用
預設選中 設定的選中項
ng-model="main.selected"
ng-options="fruit.name as fruit.name for fruit in main.fruitArr"
第一個fruit.name是select 選中的內容,和前面的ng-model繫結的值一樣
ng-include包含指令
ng-include三種引入模版:
以屬性形式
<div ng-include=""></div>
以元素形式
<ng-include src=""></ng-include>
以類名形式
<div class="ng-include: main.template.url"></div>
路由
第一步引入angular-route.js
angular.module('myApp',['ngRoute'])
在.config()中配置路由
/**
*第一個引數: 路徑(位址列中#號後面的內容),第二個引數: 路徑對應的模版和控制器
*/
$routeProvider.when('/home',{
//模版路徑
templateUrl: 'home.html',
//模版對應的控制器, 相當於以前寫的 ng-controller, 模版中可以使用控制器作用域中的方法和屬性
controller: 'homeController'
});
//其他情況下的模版和控制器(引數可以是字串或對像)
$routeProvider.otherwise('/home');
$routeProvider.後面接when與otherwise,可以鏈式操作
如:
$routeProvider
.when('/user',{
templateUrl: 'user.html',
controller: 'userController'
})
.when('/other',{
templateUrl: 'user.html',
controller: 'userController'
})
.otherwise('/home');
路由與ng-view指令結合使用
ng-view用來承載模版,三種使用方式
以元素形式
<ng-view></ng-view>
以類名形式
<div class="ng-view"></div>
以屬性形式
<div ng-view></div>
如:
<body ng-app="myApp">
<!-- ng-view用來承載模版,有三種形式 -->
<!--<ng-view></ng-view>-->
<!-- 類名形式 -->
<!--<div class="ng-view"></div>-->
<!-- 屬性形式 -->
<div ng-view></div>
</body>
在控制器中可以通過$location.path('/home');來改變路由
$scope.main = {
name: 'user頁面',
toHomeView: function () {
$location.path('/home');
}
}
when()中的引數
第一個是路由路徑
第二個是配置引數
template:對應的頁面模版
templateUrl:對應的模版路徑
controller:對應的控制器
resolve:該屬性會以健值對物件的形式,給相關的路由的控制器繫結服務或值。然後把執行的結果或服務引用,注入到控制器中。注意:與factory()結合使用
redirectTo:重定向路徑地址
reloadOnSearch: true/false 如果為true,每次查詢串發生變化都會引起路由重新整理;如果味false,查詢串發生變化不會引起路由變化
如:
1、template: '<div>other模版</div>',
2、templateUrl: 'home.html',
3、controller: 'homeController',
4、resolve: {
//該物件的屬性與服務都可以注入到homeController控制器中使用
//屬性值必須是服務的名字
res: 'cool',
//函式引數必須是服務的名字
getData: function (GetData) {
return GetData;
},
getDataTwo: function (GetDataTwo) {
return GetDataTwo.getDataJson;
}
}
.factory('cool',function () {
return 'cool';
})
.factory('GetData',['$http',function ($http) {
return function () {
return $http({method: 'get',url: 'data/news.json'});
};
}])
.factory('GetDataTwo',['$http',function ($http) {
return {
getDataJson: $http({method: 'get', url: 'data/news.json'})
};
}])
5、(1)redirectTo: '/home'
(2)
/**
* @param a 物件,裡面的屬性都是路由引數
* @param b 路由路徑
* @param c 查詢串物件
* @returns {string}
*/
redirectTo: function (a,b,c) {
console.log([a,b,c]);
return '/home';
}
在控制器中設定查詢串
$location.search('password=123');