2017-04-25 47 views
0

我有一個常數值,在我的項目中是常見的,在我的兩個模塊中 - 我想要一個設計,我只需要在一個模塊中定義它並傳遞值到另一個模塊。我怎麼能 - ? 模塊1就像是在控制器之間傳遞一個常量值angularjs

var myApp = angular.module('myApp', ['ui.router']); 
 
myApp.constant('constVar', 'http://45.26365.23/mydata/');

1和Module2就像

var Dashboardapp =angular.module('Dashboardapp', ['ui.router']); 
 
Dashboardapp.constant('constVar', 'http://45.26365.23/mydata/');

+0

你可以把這個常量放在'$ rootScope'中並且在你的應用程序的任何控制器中訪問它 –

+0

@AgamBanga我不確定'$ rootScope'可以在**應用程序之間共享常量**。 – cezar

回答

0

天真的方法是定義外恆模塊:

var myConstant = 'http://45.26365.23/mydata/'; 

,或者甚至如果你有更多的常量或其他一般數據好:

var myConfig = { 
    myConstant : 'http://45.26365.23/mydata/' 
    // other data 
} 

然後調用它的模塊:

var myApp = angular.module('myApp', ['ui.router']); 
myApp.constant('constVar', myConfig.myConstant); 

var Dashboardapp =angular.module('Dashboardapp', ['ui.router']); 
Dashboardapp.constant('constVar', myConfig.myConstant); 

另一種可能是在對其進行定義只有一個模塊,這將是您的主要模塊,並將其注入其他模塊中:

var myApp = angular.module('myApp', ['ui.router']); 
myApp.constant('constVar', 'http://45.26365.23/mydata/'); 

var Dashboardapp =angular.module('Dashboardapp', ['ui.router', 'myApp']); 
Dashboardapp.constant('constVar', myApp.constant); 

而不是最後一行,你可以在需要的時候調用常量。

+1

如何創建一個包含所有常量的獨立模塊並在需要時隨時隨地注入該模塊。 –

+0

謝謝,這節省了我的一天 - 新手到棱角分明,浪費了2天在這.. ..! –

+0

@GiovaniVercauteren是的,這將是一個增強和更優雅的方法。感謝您分享您的想法! – cezar

0

你總是可以使用「常量」是角自帶...

import * as angular from 'angular'; 

export default angular 
    .module('app.constants.foo', []) 
    .constant('fooAction', Object.freeze({ 
    name: value 
    })) 
    .name; 

然後你注入你的命名常量。因此它可以在應用程序的任何地方訪問(更重要的是不可變的(大部分))。

+0

感謝您的幫助 –

1

有關記錄,Google內部風格指南中提到「不要在範圍上定義變量」。 (它實際上明確表示)。請注意,特別是,但不僅僅是$ rootScope(如果你這樣做,你的代碼將被保證在評論中得到反擊,帶有非常難看的「THIS IS BAD」評論)。

只需在更高級別定義它,然後兩個模塊,通常在應用程序級別(Angular 1.x爲應用程序配置API定義了常量的可配置位置,您可能希望查看它,這很有用,因爲它實際上強制常數)。你也可以只使用一個沒有在任何模塊中定義的類(只是你導入和靜態使用的頂級類),或者你可以定義另一個你注入的模塊(這可能是一些簡單常量的矯枉過正)。

+0

看來我們都在考慮採用類似的方法。 +1爲您解釋,並提及Google風格指南,強調好的和不好的做法。 – cezar

+0

@Tim - 感謝您的詳細解釋 –

相關問題