私のアプリでangular-bootstrap-colorpickerを使用していますが、奇妙な問題があります。カラーピッカーモジュールにはSlider
という名前の工場があります。私のアプリにもSlider
というファクトリがあるので、それはcolorpickerを動作させません。アプリケーションでこれが発生するたびにリファクタリングすることは不可能で、とにかくちょっとした回避策のように思えます。スローされるエラーは、私のアプリの工場は何の方法setSaturation
を持っていないと角が「混乱」されているので、私は結論付けましたサードパーティの工場でMy Appの工場と同じ名前で干渉しないようにする
Uncaught TypeError: Slider.setSaturation is not a function
があります。私は工場について、そしてAngularがどのように組織化しているかについては十分に分かっていませんが、そうしたモジュールを介して利用できることは非常に奇妙なようです。例えば
angular.module('thomasApp', [])
...
.factory('Slider', ...
は
angular.module('colorpicker.module', [])
...
.factory('Slider', ...
またはその逆の影響を受けています。
私はSlider
工場に干渉しないように、このカラーピッカーをコンパートメント化することができますか?
編集:
私は名前空間接頭辞としての使用はスマートなアイデアであるとリンクの答えに同意します。しかし、それは非現実的な量のリファクタリングを必要とするでしょう。私は以下の答えを感謝しますが、それは私が行動に移せるように十分に洗練されていません。
1)これは実際には(プロジェクトの先頭からのプレフィックスを除いて)最良の解決策ですか? - 私がこのような変更を行った場合、次回にバウアーアップデートをしたとき、または誰かが私のプロジェクトをプルダウンしてバウアーをインストールしたときに消去されますか?
2)良い方法がありますか? - そうでない場合は、現在の回答を拡大し、何が起こったのかの説明を追加できますか?
上の例であるあなたは、あなたの工場の名前を変更する必要があります-partyモジュール。"thomasSlider"や "thSlider"のようなプレフィックスを使うことをお勧めします。この "thomas.Slider"のようなピリオドを使用することもできますが、配列注入を関数に渡す必要があります。 – cgTag
@ThinkingMediaサードパーティ製モジュールの一部の名前を変更する方法はありませんか? – 1252748
[AngularJSのモジュールと名前空間/名前の衝突]の可能な複製(http://stackoverflow.com/questions/13406791/modules-and-namespace-name-collision-in-angularjs) – fracz