服務就是AngularJs框架中用於定義通用功能的地方。它在功能上相似於jQuery的extend,可是使用方法上徹底不一樣。json
在app.run
中使用AngularJs提供的$location
服務。app
在app.run
中使用Angularjs提供的$http
服務。框架
使用app.server
或app.factory
向Angularjs註冊服務,並在app.run
裏經過依賴注入的方式使用它。搞清楚「服務的工廠函數」、「服務對象」和「依賴注入」之間的關係。函數
好比一個json對象 data.json {'message':'hello world'} var app = angular.modular('s.app',[]); app.run(function($http, $rootScope) { $http.get('data.json') .success(function(data) { console.log(data) }) .error(function(){ console.log(data); }) })
$http({ url: 'data.json', method: 'get', data: { id: 'box' } }).success(function(data){ console.log(data) }) .error(function(data){ console.log(data) })
兩個參數,第一個參數是:服務的名字 第二個參數是:服務的構造器 app.service('DemoServive', function() { this.message = 'hello world' }) 在依賴注入的時候,輸入服務的名字,就能拿到‘服務對象’,服務對象其實就是用咱們給的構造器建立出來的。 app.run(function(DemoService, $rootScope) { $rootScope.data = { message: DemoService.message } })
就是如同錨連接同樣,只改變地址欄的變化,網頁不刷新。this
var app = angular.module('s.app', []); app.run(function($location, $rootScope) { console.log($location.path()); //輸出的就是地址欄#後邊的東西 })
監聽hash值的變化url
var app = angular.module('s.app', []); app.run(function($location, $rootScope) { $rootScope.location = $location; //在$rootScope上,執行location.path()求得一個值,當這個哈數求得的值變化時,就執行咱們的回調函數 $rootScope.$watch('location.path()',funcion(){ var hash = $location.path(); // 當hash發生改變時,更改存儲下來的頁面狀態 switch(hash) { case '/a': data.state = 'a'; break; case '/b': data.state = 'b'; break; case '/c': data.state = 'c'; break; } switch(data.state){ case 'a': data.msg = 'a'; break; case 'b': data.msg = 'b'; break; case 'c': data.msg = 'c'; break; } }) })
步驟:code
第一個參數是:服務的名字 第二個參數是:服務的工廠函數 app.factory('DemoService', function() { //服務的工廠函數的返回值。纔是服務對象 return { msg: 'this is factory' } })