跟我學AngularJS:全局變量設置之value vs constant vs rootscope vs 服務[轉]

   林炳文Evankaka原創做品。轉載請註明出處http://blog.csdn.net/evankakajavascript

     摘要:本文要講講Angular中value vs. constant以及全局變量的設置html

 

本教程使用AngularJS版本:1.5.3java

AngularJs GitHub: https://github.com/angular/angular.js/
git

AngularJs下載地址:https://angularjs.org/angularjs

         AngualrJS中設置全局變量,即每一個Controller中均可以訪問的變量,主要有如下幾種方法:github

一、經過var 直接定義global variable,至關於直接用jsapp

2.、用angularjs rootscope來設置全局變量 。學習

三、用angularjs value來設置全局變量 。測試

四、用angularjs constant來設置全局變量 。spa

五、定義服務傳值

       這裏第1種很簡單,不說。下面從第2-5來講說

1、angularjs rootscope來設置全局變量 

    像使用rootscope,筆者的建議是放在run中,這裏其這controller中都不用引入rootscope,直接使用須要的全局變量就能夠了。

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. appCommon.run(function($rootScope) {  
  2.     $rootScope.paginationConf = {  
  3.         currentPage : 1, // 分頁開始  
  4.         itemsPerPage : 15, // 分頁每頁顯示條數   
  5.     };  
  6. })   

而後,其它Controller要用,直接 

 

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. app.controller('merchantController', function($scope) {  
  2.         var   limit = $scope.paginationConf.itemsPerPage;  
  3.         var   pageIndex  = $scope.paginationConf.currentPage;  
[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. .......................................  
  2. })  


這裏須要注意的是,每一個Controller層都會先在當前的scope找須要的變量,找不到,再到rootscope上去尋找。若是仍是找不到,就會報錯。

 

2、用angularjs value來設置全局變量 

使用實例以下:

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. <!DOCTYPE html>  
  2. <html lang="zh" ng-app="myApp">  
  3.   
  4. <head>  
  5.     <meta charset="UTF-8">  
  6.     <title>AngularJS學習</title>  
  7.     <script type="text/javascript" src="./1.5.3/angular.min.js"></script>  
  8. </head>  
  9.   
  10. <body>  
  11.     <div ng-controller="myCtrl1">  
  12.         <button ng-click="onclick1()">請點擊我1</button>  
  13.         {{value1}}  
  14.     </div>  
  15.     <div ng-controller="myCtrl2">  
  16.         <button ng-click="onclick2()">請點擊我2</button>  
  17.           {{value2}}  
  18.     </div>  
  19. </body>  
  20. <script type="text/javascript">  
  21. var app = angular.module('myApp', []);  
  22. app.value('myValue',{"value1":"林炳文","value2":"hello world",value3:1});    
  23. app.controller('myCtrl1', function($scope,myValue) {  
  24.     $scope.onclick1 = function() {  
  25.        $scope.value1 = myValue.value1 + (++myValue.value3);  
  26.    };  
  27. });  
  28. app.controller('myCtrl2', function($scope,myValue) {  
  29.     $scope.onclick2 = function() {  
  30.        $scope.value2 = myValue.value2 +  (++myValue.value3);  
  31.    };  
  32. });  
  33. </script>  
  34. </html>  

效果:

 

3、用angularjs constant來設置全局變量

使用實例

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. <!DOCTYPE html>  
  2. <html lang="zh" ng-app="myApp">  
  3.   
  4. <head>  
  5.     <meta charset="UTF-8">  
  6.     <title>AngularJS學習</title>  
  7.     <script type="text/javascript" src="./1.5.3/angular.min.js"></script>  
  8. </head>  
  9.   
  10. <body>  
  11.     <div ng-controller="myCtrl1">  
  12.         <button ng-click="onclick1()">請點擊我1</button>  
  13.         {{value1}}  
  14.     </div>  
  15.     <div ng-controller="myCtrl2">  
  16.         <button ng-click="onclick2()">請點擊我2</button>  
  17.           {{value2}}  
  18.     </div>  
  19. </body>  
  20. <script type="text/javascript">  
  21. var app = angular.module('myApp', []);  
  22. app.constant('myConstant',{"value1":"林炳文","value2":"hello world",value3:1});    
  23. app.controller('myCtrl1', function($scope,myConstant) {  
  24.     $scope.onclick1 = function() {  
  25.        $scope.value1 = myConstant.value1 + (++myConstant.value3);  
  26.        myConstant.value1 = $scope.value1;  
  27.        myConstant.value2 = $scope.value1;  
  28.    };  
  29. });  
  30. app.controller('myCtrl2', function($scope,myConstant) {  
  31.     $scope.onclick2 = function() {  
  32.        $scope.value2 = myConstant.value2 +  (++myConstant.value3);  
  33.         myConstant.value1 = $scope.value2;  
  34.         myConstant.value2 = $scope.value2;  
  35.    };  
  36. });  
  37. </script>  
  38. </html>  

效果:

 


value與constant區別

value不可在config裏注入,constant能夠。下面是筆者作的一個測試

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. app.constant('myConstant',{"value1":"林炳文","value2":"hello world",value3:1});    
  2. app.value('myValue',{"value1":"林炳文","value2":"hello world",value3:1});    

而後在config來引入:

 

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. app.config(function(myValue){  
  2. ..  
  3. });  

報錯以下:

 

 


若是使用

 

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. app.config(function(myConstant){  
  2. //能夠獲得constant定義的'myConstant'  
  3. });  

一切正常

 

4、定義服務傳值

     這是Java中最經常使用的方法了,其實就至關於定義一個對象的服務中,並設置get/set方法。經過這兩個方法來實時更新與獲取數據

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. <!DOCTYPE html>  
  2. <html lang="zh" ng-app="myApp">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>AngularJS入門學習</title>  
  6.     <script type="text/javascript" src="./1.5.3/angular.min.js"></script>  
  7. </head>  
  8. <body>  
  9.      <div ng-controller="childCtrl1">  
  10.         {{name}}  
  11.         <button ng-click="setName()">set name to jack jack jack</button>  
  12.      </div>  
  13.      <div ng-controller="childCtrl2">  
  14.         {{name}}  
  15.         <button ng-click="setName()">set name to tom tom tom</button>  
  16.      </div>  
  17. </body>  
  18. <script type="text/javascript">  
  19. var app = angular.module('myApp', []);  
  20. app.factory('dataService', function() {  
  21.   var name = '我是林炳文';  
  22.   var service = {};  
  23.   service.getName = function() {  
  24.     return name;  
  25.   };  
  26.   service.setName = function(newName) {  
  27.      name = newName;  
  28.   };  
  29.   return service;  
  30. });  
  31. app.controller('childCtrl1', function($scope,dataService) {  
  32.     $scope.name = dataService.getName();  
  33.     $scope.setName = function() {  
  34.           dataService.setName( "set name to jack jack jack");  
  35.            $scope.name = dataService.getName();  
  36.     };  
  37. });  
  38. app.controller('childCtrl2', function($scope,dataService) {  
  39.        $scope.name = dataService.getName();  
  40.        $scope.setName = function() {  
  41.         dataService.setName( "set name to tom tom tom");  
  42.           $scope.name = dataService.getName();  
  43.     };  
  44. });  
  45. </script>  
  46. </html>  

效果:

 

相關文章
相關標籤/搜索