Angular JS'de CSS stili özelliğini dinamik olarak uygulama


112

Bu basit bir problem olmalı ama bir çözüm bulamıyorum.

Aşağıdaki işaretlemem var:

<div style="width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;"></div>

Arka plan renginin kapsama bağlanmasına ihtiyacım var, bu yüzden şunu denedim:

<div style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:{{data.backgroundCol}};}"></div>

Bu işe yaramadı, bu yüzden biraz araştırma yaptım ve buldum ng-style, ama bu işe yaramadı, bu yüzden dinamik kısmı çıkarmaya ve sadece stili kodlamaya çalıştım ng-style, şöyle ...

<div ng-style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;}"></div>

ve bu bile çalışmıyor. Nasıl ng-styleçalıştığını yanlış mı anlıyorum ? {{data.backgroundCol}}Düz stil niteliği koymanın ve değeri eklemesini sağlamanın bir yolu var mı ?


Bu makaleye bir göz at: ecofic.com/about/blog/…
Rohit

Yanıtlar:


190

ngStyle yönergesi,dinamik olarak bir HTML öğesi üzerinde CSS stiliniayarlamanıza izin verir.

Anahtarları CSS stil adları olan bir nesneye dönüşen ifade ve değerleri, bu CSS anahtarları için karşılık gelen değerlerdir. Bazı CSS stil adları bir nesne için geçerli anahtarlar olmadığından, bunların tırnak içine alınması gerekir.

ng-style="{color: myColor}"

Kodunuz şöyle olacaktır:

<div ng-style="{'width':'20px', 'height':'20px', 'margin-top':'10px', 'border':'solid 1px black', 'background-color':'#ff0000'}"></div>

Kapsam değişkenlerini kullanmak istiyorsanız:

<div ng-style="{'background-color': data.backgroundCol}"></div>

İşte kemanla ilgili bir örnek ngStyleve kodun altında çalışan kod parçacığı ile:

angular.module('myApp', [])
.controller('MyCtrl', function($scope) {
  $scope.items = [{
      name: 'Misko',
      title: 'Angular creator'
    }, {
      name: 'Igor',
      title: 'Meetup master'
    }, {
      name: 'Vojta',
      title: 'All-around superhero'
    }

  ];
});
.pending-delete {
  background-color: pink
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller='MyCtrl' ng-style="{color: myColor}">

  <input type="text" ng-model="myColor" placeholder="enter a color name">

  <div ng-repeat="item in items" ng-class="{'pending-delete': item.checked}">
    name: {{item.name}}, {{item.title}}
    <input type="checkbox" ng-model="item.checked" />
    <span ng-show="item.checked"/><span>(will be deleted)</span>
  </div>
  <p>
    <div ng-hide="myColor== 'red'">I will hide if the color is set to 'red'.</div>
</div>


Fareyle üzerine geldiğimde arka plan rengini değil, geçerli tıklanan öğenin orijinal arka plan rengini almak istiyorum. Aşağıdakileri kullanmak bana orijinal rengi değil, üzerine gelme arka plan rengini verir: $ event.currentTarget.currentStyle.backgroundColor; orijinal arka plan rengini nasıl elde edeceğiniz konusunda bir fikriniz var mı?
Mahesh

<div ng-style = "{'background-color': data.backgroundCol}"> </div> <div ng-style = "{background-color: data.backgroundCol}"> </div>
eric2323223 olmalıdır

24

En kolay yol, stil için bir işlev çağırmak ve işlevin doğru stili döndürmesini sağlamaktır.

<div style="{{functionThatReturnsStyle()}}"></div>

Ve kontrol cihazınızda:

$scope.functionThatReturnsStyle = function() {
  var style1 = "width: 300px";
  var style2 = "width: 200px";
  if(condition1)
     return style1;
  if(condition2)
     return style2;
}

4
Bunu tavsiye etmem, açısal, stil ayrıntılarını görünümde
tutmakla ilgilidir

7
Bunu da önermiyorum, bu yalnızca chrome gibi birkaç tarayıcıda işe yarayacak, ancak IE 9+ 'ye bakarsanız bu işe yaramayacak
imal hasaranga perera

Aslında bu hala IE11'de çalışmıyor, önceki bir projeden bazı kodları kopyaladım ve işe yaramadığında kafam karıştı, önceki proje Chrome kullanıyordu
csharpsql

18

Doğrudan ngStyle belgelerden :

Anahtarları CSS stil adları olan bir nesneye dönüşen ifade ve değerleri, bu CSS anahtarları için karşılık gelen değerlerdir.

<div ng-style="{'width': '20px', 'height': '20px', ...}"></div>

Yani bunu yapabilirsin:

<div ng-style="{'background-color': data.backgroundCol}"></div>

Bu yardımcı olur umarım!


4
Evet, bunu belgelerde gördüm, ancak bunu birden fazla kurala nasıl çevireceğimi göremedim, şimdi bunun normal css sözdizimi değil, nesne sözdizimi olduğunu görebiliyorum.
jonhobbs

14

Genel bir notta, ng-if ve ng-stilinin, arka plan görüntüsündeki değişiklikle birlikte koşullu değişiklikleri birleştiren bir kombinasyonunu kullanabilirsiniz.

<span ng-if="selectedItem==item.id"
      ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_active.png)',
                'background-size':'52px 57px',
                'padding-top':'70px',
                'background-repeat':'no-repeat',
                'background-position': 'center'}">
 </span>
 <span ng-if="selectedItem!=item.id"
       ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_deactivated.png)',
                'background-size':'52px 57px',
                'padding-top':'70px',
                'background-repeat':'no-repeat',
                'background-position': 'center'}">
 </span>

0

Normal stylebir ng-styleözniteliğe dönüşmeyecek stilleri ve bir özniteliğe koşullu / kapsam stillerini koymanız gerektiğini söyleyebilirim . Ayrıca dize anahtarları gerekli değildir. Kısa çizgi ile ayrılmış CSS anahtarları için deve harfini kullanın.

<div ng-style="{backgroundColor: data.backgroundCol}" style="width:20px; height:20px; margin-top:10px; border:solid 1px black;"></div>

0

Basitçe şunu yapın:

<div ng-style="{'background-color': '{{myColorVariable}}', height: '2rem'}"></div>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.