Şu anda AngularJS öğreniyorum ve arasındaki farkı anlamakta zorluk çekiyorum ng-bind
ve ng-model
.
Biri bana nasıl farklı olduklarını ve birinin diğeri üzerinde ne zaman kullanılması gerektiğini söyleyebilir mi?
Şu anda AngularJS öğreniyorum ve arasındaki farkı anlamakta zorluk çekiyorum ng-bind
ve ng-model
.
Biri bana nasıl farklı olduklarını ve birinin diğeri üzerinde ne zaman kullanılması gerektiğini söyleyebilir mi?
Yanıtlar:
ng-bind tek yönlü veri bağlama özelliğine sahiptir ($ scope -> view). Değişken adı {{ val }}
olan html'ye $scope.val
eklenen kapsam değerini gösteren bir kısayola sahiptir val
.
ng-model , form öğelerinin içine yerleştirilmek üzere tasarlanmıştır ve iki yönlü veri bağlaması vardır ($ scope -> görünüm ve görünüm -> $ kapsam) <input ng-model="val"/>
.
tosh'un cevabı sorunun kalbine güzelce ulaşıyor. İşte bazı ek bilgiler ....
ng-bind
ve ng-model
her ikisinin de verileri kullanıcıya vermeden önce dönüştürme kavramı vardır. Bu amaçla, ng-bind
kullandığı filtreleri ise ng-model
kullandığı biçemleyicilerle .
İle ng-bind
, verilerinizi dönüştürmek için bir filtre kullanabilirsiniz . Örneğin,
<div ng-bind="mystring | uppercase"></div>
,
veya daha basit:
<div>{{mystring | uppercase}}</div>
Not uppercase
yerleşik bir açısal filtresi , ayrıca rağmen kendi filtreyi oluşturmak .
Bir ng-modeli formatlayıcı oluşturmak için require: 'ngModel'
, bu direktifin ngModel'in erişimine izin veren bir direktif oluşturursunuz controller
. Örneğin:
app.directive('myModelFormatter', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, controller) {
controller.$formatters.push(function(value) {
return value.toUpperCase();
});
}
}
}
Sonra kısmi olarak:
<input ngModel="mystring" my-model-formatter />
Bu esasen yukarıdaki örnekte filtrenin yaptıklarına ng-model
eşdeğerdir .uppercase
ng-bind
Şimdi, kullanıcının değerini değiştirmesine izin vermeyi planlıyorsanız ne olur mystring
? model -> görünümündenng-bind
sadece tek yönlü bağlama vardır . Ancak, görünüm -> modelinden bağlanabilir, bu da kullanıcının modelin verilerini değiştirmesine izin verebileceğiniz anlamına gelir ve bir ayrıştırıcı kullanarak kullanıcının verilerini modern bir şekilde biçimlendirebilirsiniz. İşte böyle görünüyor:ng-model
app.directive('myModelFormatter', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, controller) {
controller.$parsers.push(function(value) {
return value.toLowerCase();
});
}
}
}
ng-model
Formatlayıcı / ayrıştırıcı örneklerinin canlı bir dalgıçıyla oynayın
ng-model
ayrıca yerleşik doğrulama vardır. Basitçe değiştirmek $parsers
veya $formatters
çağrılacak işlevi ngModel 'in controller.$setValidity(validationErrorKey, isValid)
fonksiyonu .
Açısal 1.3,$parsers
veyayerine doğrulama için kullanabileceğiniz yeni bir $ validators dizisine sahiptir$formatters
.
Angular 1.3 ayrıca ngModel için alıcı / ayarlayıcı desteğine sahiptir
Bu yönerge öncelik seviyesi 1'de yürütülür.
Örnek Plunker
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 şunlardan sorumludur:
Bu yönerge öncelik seviyesi 0'da yürütülür.
Örnek Plunker
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 şunlardan sorumludur:
ng-bind
Veya tuşunu kullanarak tereddüt ediyorsanız ng-model
, aşağıdaki soruları yanıtlamaya çalışın:
Eğer Do sadece gereken görüntüleme verilerinin?
Evet: ng-bind
(tek yönlü ciltleme)
Hayır: ng-model
(iki yönlü ciltleme)
Eğer gerekiyor mu metin içeriğini bağlamak (ve değeri)?
Evet: ng-bind
Hayır: ng-model
(değerin gerektiği yerlerde ng-bind kullanmamalısınız)
Etiketiniz bir HTML
<input>
mi?
Evet: ng-model
(ng-bind <input>
etiketli kullanamazsınız )
Hayır: ng-bind
ng model
AngularJS'deki ng-model yönergesi, giriş bileşenleriyle uygulamada kullanılan değişkenleri bağlamak için en büyük güçlerden biridir. Bu, iki yönlü veri bağlama işlevi görür. İki yönlü bağlamalar hakkında daha iyi anlamak istiyorsanız, bir giriş bileşeniniz vardır ve bu alanda güncellenen değer uygulamanın diğer bölümüne yansıtılmalıdır. Daha iyi çözüm, bir değişkeni o alana bağlamak ve uygulamadan güncellenen değeri görüntülemek istediğiniz yere bu değişkeni çıkarmaktır.
ng-bağlama
ng-bind, ng-modelinden çok farklı çalışır. ng-bind, html bileşeni içindeki değeri iç HTML olarak görüntülemek için kullanılan bir yol veri bağlamasıdır. Bu yönerge, değişkene bağlanmak için değil, yalnızca HTML öğelerinin içeriğiyle bağlanmak için kullanılabilir. Infact, bileşeni HTML öğelerine bağlamak için ng-model ile birlikte kullanılabilir. Bu yönerge, div, span vb. Blokları dahili HTML içeriğiyle güncellemek için çok kullanışlıdır.
Bu örnek anlamanıza yardımcı olacaktır.
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 genellikle denetleyiciden ve html sayfasından değişkeni değiştirebileceğimiz bir değişkeni bağlamak için giriş etiketleri için kullanılır, ancak ngBind , html sayfasında bir değişkeni görüntülemek için kullanılır ve değişkeni yalnızca denetleyiciden değiştirebilir ve html değişkeni göster değişkenini gösterir.
Ng-bind ile <p>
görüntülemek için kullanabiliriz, kısayolunu ng-bind {{model}}
kullanabiliriz, ng-bind'i html giriş kontrolleri ng-bind {{model}}
ile kullanamayız, ancak html giriş kontrolleri için kısayolu kullanabiliriz .
<input type="text" ng-model="name" placeholder="Enter Something"/>
<input type="text" value="{{name}}" placeholder="Enter Something"/>
Hello {{name}}
<p ng-bind="name"</p>