AngularJSとドル変数の使用


128

angularJSでドルのメソッドと変数を使用する理由が、消化が行われているときにこれらの値をチェックしないようにangularJSに指示することであるかどうか、誰かが知っていますか?したがって、angularが$scope.$valueand $scope.valueに出くわすと、変数名の前にドル記号が付いているため、前者のチェックが回避されますか?


angularjsの "$ scope"と "scope"違いについては、このブログ投稿も参照してください...
MarcoS

19
AngularはおそらくjQueryから$を奪おうとしています。
daniel1426 2014年

そのリンクは、$ scopeについてあまり説明していないページにリダイレクトします。
ポール

5
ディレクティブのドキュメント-コントローラには$scopeありますが、ディレクティブにはありscopeます。WTF?
LeeGee

回答:


87

Angularがドル記号で始まる変数を無視する場合があります。

  1. Schumliさんのコメントは、以下の場所JSONフィルタが出力していないだろう
  2. {{ }}ディレクティブを使用すると、angularはネストされた $ 変数を表示しません。たとえば、これはvisibleプロパティのみを表示します。

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
  3. さらに、スコープオブジェクトに明示的なウォッチャーを追加する場合、このオブジェクトの先頭にドル記号があるプロパティを変更しても、ウォッチャーはトリガーされません。この更新されたフィドルを参照してください。

  4. angular.equals() プレフィックスが付いたキーを無視します$


ええ、あなたは正しいようです。クリックイベントなどがあったとしても、変化します。ありがとうございました。
matsko 2012

7
接頭辞付きのプロパティを無視するAngularの特定の部分があります。たとえば、「json」フィルターは「$」で始まる変数を出力しません。
シュムリ

116

これは、以下のスニペットhttp://docs.angularjs.org/tutorial/step_05からの単なる命名規則です。

'$'プレフィックスの命名規則
独自のサービスを作成できます。実際には、手順11で正確に作成します。命名規則として、angularの組み込みサービス、Scopeメソッド、およびその他のいくつかのAngular APIには '$'プレフィックスがあります。名前の前に。サービスとモデルに名前を付けるときは、可能性のある名前の衝突を避けるために、「$」プレフィックスを使用しないでください。

http://docs.angularjs.org/guide/concepts#angular_namespace

Angular名前空間
偶発的な名前の衝突を防ぐために、Angularは$と衝突する可能性のあるオブジェクトの名前に接頭辞を付けます。誤ってAngularコードと衝突する可能性があるため、コードで$プレフィックスを使用しないでください。


2
ディレクティブdoc [1]が$scopeコントローラー内にあるのにscope、ディレクティブ内にあるのはなぜですか?--- [1] docs.angularjs.org/guide/directive
LeeGee

2
@LeeGeeそれは単なる慣例です。stackoverflow.com/a/19289054/114558
rinogo

30

$接頭辞は、角度のコアに属する変数、パラメータ、プロパティ、または方法を意味します。

フレームワークの内部で発生しているが、実際にはAPIの一部ではないオブジェクトのプロパティは、プライベートメソッドまたはプロパティを示すために、$またはそれから始まる場合があります。これは、プレフィックスが他のライブラリでよく使用される方法と同じです。$$_

フレームワーク自体に特別な意味を持たせることはできますが、ランタイムによるコードの解釈方法には影響を与えません。基本的に、「これをいじってはいけない」という命名規則です。


誤解していると思います。ランタイムは、変数の命名何を気にしません。あなたはそれを呼ぶことができます$$__$_$–それはインタプリタにとって特別な意味のない単なる識別子です。
ダルガード

ランタイムとフレームワークの違いを強調するためにいくつかの単語を追加しました。あなたの投票を変えるほど親切にしてください。
ダルガード

7

完全には定かではありませんが、AngularJSの内部では、ダイジェスト中にこれらの$で始まる変数を操作することに依存していると思います。これらの変数をチェックすると、ダイジェストの各サイクル中に常に変化する可能性があるため、ダイジェストが安定しないことを意味します。

それについて私を引用しないでください。:)


10
「私にそれを引用しないでください」という理由で反対票を投じました。申し訳ありませんが、不確実性を認める答えはあまり役に立ちません:(
David Rivers

2
反対投票が賛成に変換されました。あなたが正しいと仮定すると、これは今や有用な答えです!
デビッドリバーズ

2
@DavidRivers、答えが最初はためらっていた場合、言い換えるとそれがより有用になることはありません。実際、答えは間違っている可能性があり、ためらいの欠如は潜在的な間違い主張するでしょう。代わりに、この回答が有用であると見なされるようにするには、信頼できるソースを引用することによっていくつかの証拠でバックアップするか、表現されたポイントを再現するためのフィドルを提供する必要があります。
Ivaylo Slavov 2014

1
@IvayloSlavov:私は絶対にあなたに同意します。私は(おそらく誤って)回答者が彼が正しいことを再確認し、不確実性を取り除くために単に回答を書き直したのではないと想定しました。ソースやフィドルが欲しかったのではないでしょうか。
デビッドリバーズ

1
@AlexFord:ねえ、男。謝罪をありがとう!私は明確ではなく、とにかくこのすべての誤解を始めました。あなたのポイントは有効であり、私はあなたに同意します。自分が誤って伝えられていないことを確認したかったのですが、自分の言い回しがはっきりしませんでした。とにかく、気分が悪くないので、私の見解を見ていただけたことを本当に光栄に思います。乾杯、男!
デビッドリバーズ

5

私はいつも$サービスの「S」のように見えました。


それが正解です。それは論理的でシンプルです。これらは実際にはサービスであるため、$ 'S'はサービス用であることを覚えておくとよいでしょう。素敵な簡単な説明。
ヨンク

2
$ scopeはサービスですか?
デッドエンド

5

ドル($)記号は、特定のディレクティブで要素が反復(または解釈)されるのを防ぎます。たとえば、$で始まるプロパティは、forループのif句のng-repeatために使用されません。

if(collection.hasOwnProperty(key) && key.charAt(0) != '$')

誰かがangular githubページのこのトピックについて問題を出しました


方法にshallowCopyで始まる特性$$ためのスキップされる場合句反復一方properies

if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {

1

@MarcoSがhttps://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scopeへのリンクを提供しました $ scopeとスコープの違いを説明する。他の回答の情報に追加して、これは便利だと思いました。

角度指令にはリンクとコントローラーがあります。リンクは、パラメーター、スコープ、要素、属性オブジェクトの固定セットを持つ標準関数です。

コントローラの引数はAngularインジェクタによって管理され、順序に依存しません。インジェクターは、$で始まるパラメーターを探すことで、渡すオブジェクトを解決します。

https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scopeの作成者は、それをよりよく説明しています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.