私は現在AngularJSを学んでいて、ng-bind
とng-model
の違いを理解するのが困難です。
誰がそれらがどのように違うのか、そして一方が他方に対して使われるべき時を私に言うことができますか?
ng-bind は一方向のデータバインディングを持ちます($ scope - > view)。これには、val
が変数名であるhtmlに挿入されたスコープ値{{ val }}
を表示するショートカット$scope.val
があります。
ng-model はフォーム要素の中に置くことを意図しており、双方向のデータバインディングを持っています($ scope - > viewとview - > $ scope)。 <input ng-model="val"/>
。
toshの答えは問題の核心にうまく入ります。追加情報を次に示します。..
ng-bind
とng-model
はどちらも、ユーザーに出力する前にデータを変換するという概念を持っています。そのために、ng-bind
はfiltersを使用し、ng-model
はformattersを使用します。
ng-bind
を使用すると、filterを使用してデータを変換できます。例えば、
<div ng-bind="mystring | uppercase"></div>
、
またはもっと簡単に:
<div>{{mystring | uppercase}}</div>
uppercase
は組み込みのangularフィルター ですが、 独自のフィルターを構築 することもできます。
Ngモデルフォーマッタを作成するには、require: 'ngModel'
を実行するディレクティブを作成します。これにより、そのディレクティブはngModelのcontroller
にアクセスできます。例えば:
app.directive('myModelFormatter', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, controller) {
controller.$formatters.Push(function(value) {
return value.toUpperCase();
});
}
}
}
それからあなたのパーシャルで:
<input ngModel="mystring" my-model-formatter />
これは本質的に、上記のng-model
の例でuppercase
filterが行っていることと同等のng-bind
です。
ここで、ユーザーがmystring
の値を変更できるようにする場合はどうなりますか? ng-bind
には、model-> viewからの1つの方法のバインディングのみがあります。ただし、ng-model
はview-> modelからバインドできます。つまり、ユーザーにモデルのデータの変更を許可し、parser合理化された方法でユーザーのデータをフォーマットできます。これは次のようなものです。
app.directive('myModelFormatter', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, controller) {
controller.$parsers.Push(function(value) {
return value.toLowerCase();
});
}
}
}
ng-model
フォーマッター/パーサーの例のライブプランカーで再生
ng-model
には検証も組み込まれています。 $parsers
または$formatters
関数を修正して、 ngModelのcontroller.$setValidity(validationErrorKey, isValid)
関数 を呼び出します。
Angular 1.3には新しい$ validators配列があります$parsers
または$formatters
の代わりに検証に使用できます。
ngModel
ngModelディレクティブは、入力、選択、テキストエリア(またはカスタムフォームコントロール)をスコープ上のプロパティにバインドします。
このディレクティブは優先度1で実行されます。
例 プランカー
_ javascript _
angular.module('inputExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.val = '1';
}]);
_ css _
.my-input {
-webkit-transition:all linear 0.5s;
transition:all linear 0.5s;
background: transparent;
}
.my-input.ng-invalid {
color:white;
background: red;
}
_ html _
<p id="inputDescription">
Update input to see transitions when valid/invalid.
Integer is a valid value.
</p>
<form name="testForm" ng-controller="ExampleController">
<input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input"
aria-describedby="inputDescription" />
</form>
ngModelは次のことを担当します。
ngBind
ngBind属性はAngularに、指定されたHTML要素のテキストコンテンツを特定の式の値で置き換え、その式の値が変更されたときにテキストコンテンツを更新するように指示します。
このディレクティブは優先度0で実行されます。
例 プランカー
_ javascript _
angular.module('bindExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.name = 'Whirled';
}]);
_ html _
<div ng-controller="ExampleController">
<label>Enter name: <input type="text" ng-model="name"></label><br>
Hello <span ng-bind="name"></span>!
</div>
ngBindが担当します。
ng-model
angularJSのng-modelディレクティブは、アプリケーションで使用される変数を入力コンポーネントにバインドする最大の強みの1つです。これは双方向のデータバインディングとして機能します。双方向バインディングについてよりよく理解したい場合は、入力コンポーネントがあり、そのフィールドに更新された値をアプリケーションの他の部分に反映させる必要があります。より良い解決策は、そのフィールドに変数をバインドし、アプリケーションに出力して更新された値を表示したいときはいつでもその変数を出力することです。
ng-bind
ng-bindはng-modelとはかなり違った働きをします。 ng-bindは、HTMLコンポーネント内の値を内部HTMLとして表示するために使用される一方向のデータバインディングです。このディレクティブは、変数とのバインディングには使用できませんが、HTML要素のコンテンツとのバインディングにのみ使用できます。実際には、これをng-modelとともに使用して、コンポーネントをHTML要素にバインドできます。このディレクティブは、div、spanなどのブロックを内部のHTMLコンテンツで更新するのに非常に便利です。
この例 を理解するのに役立ちます。
angular.module('testApp',[]).controller('testCTRL',function($scope)
{
$scope.testingModel = "This is ModelData.If you change textbox data it will reflected here..because model is two way binding reflected in both.";
$scope.testingBind = "This is BindData.You can't change this beacause it is binded with html..In above textBox i tried to use bind, but it is not working because it is one way binding.";
});
div input{
width:600px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<head>Diff b/w model and bind</head>
<body data-ng-app="testApp">
<div data-ng-controller="testCTRL">
Model-Data : <input type="text" data-ng-model="testingModel">
<p>{{testingModel}}</p>
<input type="text" data-ng-bind="testingBind">
<p ng-bind="testingBind"></p>
</div>
</body>
ngModel 通常はコントローラやHTMLページから変数を変更することができる変数をバインドするための入力タグに使用しますが、 ngBind htmlページに変数を表示するために使用し、単にコントローラからHTML変数を変更することができます変数。
表示には<p>
と一緒にng-bindを使うことができます、ng-bind {{model}}
にショートカットを使うことはできますが、html入力コントロールと一緒にng-bindを使うことはできませんが、html入力コントロールと一緒にng-bind {{model}}
のためのショートカットを使うことができます。
<input type="text" ng-model="name" placeholder="Enter Something"/>
<input type="text" value="{{name}}" placeholder="Enter Something"/>
Hello {{name}}
<p ng-bind="name"</p>