web-dev-qa-db-ja.com

AngularJSでの::の意味

AngularJSはまったく新しいです。誰でもこれを手伝ってくれますか?私は次のような構文を見てきました

<a href={{ ::something}}>some other thing</a>

その二重コロンは何のためですか?削除するとどうなりますか?

37
Maryam

::は、1回限りのバインディングに使用されます。式は、安定したら、つまり最初のダイジェストの後、再計算を停止します。

したがって、somethingに加えられた更新は表示されません。

73
Vivek

コントローラからモデルをバインドして表示専用にするために使用されます。ビューからこれを変更しても、コントローラーモデルは更新されません。これは、ワンタイムバインディングを実現するために使用されることを意味します。

angular.module("myApp", []).controller('ctrl', ['$scope', function($scope) {
$scope.label = 'Some text';
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
<html ng-app="myApp">
  <body ng-controller="ctrl">  
    <div>{{::label}}</div> // this will print `Some text` on load
    <div>{{label}}</div> // this will too print `Some text` on load
    <br />
    <button ng-click="label='IUpdateLabelFromHtml'">Change label</button>
  </body>
 </html>

[ラベルの変更]リンクをクリックしてラベルの意味を変更すると、2番目のテキスト、つまり::演算子なしでバインドされたテキストのみが更新されます。

詳細についてはこちらをお読みください 一方向バインディング

5
Jay Shukla

これは、スコープアイテム「何か」に1回限りのバインディングが関連付けられていることを意味します。したがって、コントローラーでアイテムが変更されても、変更は適用されません。

これは良い記事です ウォッチャーとワンタイムバインディングについて

2
Mike Sav