2016-04-14 9 views
0

これはあまりにも簡単な質問のように思えるかもしれません。私は、ラジオボタンの色に対応する2つのdiv(ボックス)の背景色を変更したいと思います。だから、ピンクのラジオボタンはdivをピンクにし、赤はそれを赤にします。最終的に私はボディbg-colorとテキストの色も変えたいと思っています。入力タイプのng値は正しいですか?私は部門のngクラスが間違いなくそうであることを知っています...しかし、私はそれが必要なのか分からないのですか?ラジオボタンのクリック時にng-class(cssプロパティ)を適用するにはどうすればよいですか?

事前におねがいします!ここで

<body ng-app="MyModule"> 
    <div ng-controller="MyController as ctrl"> 
     <!-- Create input radio button --> 
     <input type="radio" 
      name="color" 
      ng-model="ctrl.colorSelected" 
      ng-value="ctrl.bgColorRed">Red 

     <input type="radio" 
      name="color" 
      ng-model="ctrl.colorSelected" 
      ng-value="ctrl.bgColorPink">Pink 

     <input type="radio" 
      name="color" 
      ng-model="ctrl.colorSelected" 
      ng-value="ctrl.bgColorOrange">Orange 

     <input type="radio" 
      name="color" 
      ng-model="ctrl.colorSelected" 
      ng-value="ctrl.bgColorYellow">Yellow 

     <div class="box" ng-class="ctrl.bgColorRed"> 
     Letterpress craft beer typewriter, bitters butcher ennui heirloom celiac. Four dollar toast pork belly 8-bit trust fund, raw denim letterpress shoreditch stumptown food truck locavore venmo typewriter blog. Post-ironic chambray lumbersexual, fashion axe hoodie kitsch swag yuccie organic. DIY hoodie lomo, austin post-ironic literally portland shoreditch pour-over neutra sriracha YOLO selvage thundercats messenger bag. 
     </div> 
    <div class="box" ng-class=""> 
     Tumblr hammock authentic, humblebrag pitchfork ramps listicle cliche distillery ethical 8-bit vice. 3 wolf moon whatever direct trade fanny pack franzen, swag polaroid austin letterpress. Street art health goth everyday carry heirloom hoodie echo park gluten-free irony, viral venmo brunch vegan pop-up. Man braid listicle food truck, fashion axe austin polaroid pop-up shoreditch post-ironic scenester jean shorts synth. 
      </div> 


    //////// JS ///////// 
     var myMod = angular.module("MyModule", []); 
     myMod.controller("MyController", function() { 
     var self = this; 
     self.colorSelected = " "; 
     self.bgColorRed=["red"]; 
     self.bgColorPink=["pink"]; 
     self.bgColorOrange=["orange"]; 
     self.bgColorYellow=["yellow"]; 
     self.textColor=["white", "strong"]; 

    }); 

    ///// CSS /////////// 
    .box { 
       width: 350px; 
       height: 350px; 
       background-color: grey; 
       margin-top: 50px; 
       margin-left: 100px; 
       padding: 20px; 
       float: left; 
       text-align: justify; 
      } 
      .red { 
       background-color: red; 
      } 
      .pink { 
       background-color: pink; 
      } 
     .orange { 
       background-color: orange; 
      } 
     .yellow { 
      background-color: yellow; 
     } 
      .white { 
       color: white; 
      } 
      .strong { 
       font-weight: bold; 
      } 

https://jsfiddle.net/sash2507/w1waetd4/3/

答えて

0

正しいコード

var myMod = angular.module("MyModule", []); 
 
myMod.controller("MyController", function() { 
 
    var vm = this; 
 
    vm.colorSelected = ""; 
 
    // Class change assignment 
 
    vm.bgColorRed = "red"; 
 
    vm.bgColorPink = "pink"; 
 
    vm.bgColorOrange = "orange"; 
 
    vm.bgColorYellow = "yellow"; 
 
    vm.textColor = ["white", "strong"]; 
 

 

 

 
});
.box { 
 
    width: 300px; 
 
    height: 300px; 
 
    background-color: grey; 
 
    margin-top: 50px; 
 
    margin-left: 100px; 
 
    padding: 25px; 
 
    float: left; 
 
    text-align: justify; 
 
    font-size: 1.15em; 
 
} 
 
.red { 
 
    background-color: red; 
 
} 
 
.pink { 
 
    background-color: pink; 
 
} 
 
.orange { 
 
    background-color: orange; 
 
} 
 
.yellow { 
 
    background-color: yellow; 
 
} 
 
.white { 
 
    color: white; 
 
} 
 
.strong { 
 
    font-weight: bold; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="MyModule"> 
 
    <div ng-controller="MyController as ctrl"> 
 
    <!-- Create input radio button --> 
 
    <input type="radio" name="color" ng-model="ctrl.colorSelected" ng-value="ctrl.bgColorRed">Red 
 

 
    <input type="radio" name="color" ng-model="ctrl.colorSelected" ng-value="ctrl.bgColorPink">Pink 
 

 
    <input type="radio" name="color" ng-model="ctrl.colorSelected" ng-value="ctrl.bgColorOrange">Orange 
 

 
    <input type="radio" name="color" ng-model="ctrl.colorSelected" ng-value="ctrl.bgColorYellow">Yellow 
 

 
    <div class="box" ng-class="{red: ctrl.colorSelected == ctrl.bgColorRed, pink: ctrl.colorSelected == ctrl.bgColorPink, orange: ctrl.colorSelected == ctrl.bgColorOrange, yellow: ctrl.colorSelected == ctrl.bgColorYellow}"> 
 
     {{ctrl.colorSelected}} Letterpress craft beer typewriter, bitters butcher ennui heirloom celiac. Four dollar toast pork belly 8-bit trust fund, raw denim letterpress shoreditch stumptown food truck locavore venmo typewriter blog. Post-ironic chambray 
 
     lumbersexual, fashion axe hoodie kitsch swag yuccie organic. DIY hoodie lomo, austin post-ironic literally portland shoreditch pour-over neutra sriracha YOLO selvage thundercats messenger bag. 
 
    </div> 
 
    <div class="box" ng-class="{red: ctrl.colorSelected == ctrl.bgColorRed, pink: ctrl.colorSelected == ctrl.bgColorPink, orange: ctrl.colorSelected == ctrl.bgColorOrange, yellow: ctrl.colorSelected == ctrl.bgColorYellow}"> 
 
     Tumblr hammock authentic, humblebrag pitchfork ramps listicle cliche distillery ethical 8-bit vice. 3 wolf moon whatever direct trade fanny pack franzen, swag polaroid austin letterpress. Street art health goth everyday carry heirloom hoodie echo park 
 
     gluten-free irony, viral venmo brunch vegan pop-up. Man braid listicle food truck, fashion axe austin polaroid pop-up shoreditch post-ironic scenester jean shorts synth. 
 
    </div> 
 
    </div> 
 
</body>

+0

こんにちは、私の解決策を受け入れるようお願いします。 –

+0

はい!スーパーヘルプ。入力ボタンをクリックして複数のスタイルを追加してからng-classに対応するインデックスを割り当てる必要があったので、配列を使用してしまいました。しかし、あなたのソリューションは本当に正しい方向に私を入れました。ありがとう! –

+0

ありがとう!あなたは私の答えを編集して正しい答えとして受け入れることができるので、それは他の人が同様の問題を抱えているのに役立ちます。 –

0
ある

Zhiliangは正しい考えを持っています。もう一つの解決策は、あなたの質問を正しく理解しているならば、各divにインライン条件を設定するのではなく、関数呼び出しを使って背景色を設定することです。

また、色の配列を使用すると、配列に新しい色を追加するだけで、色のクラスを追加することができ、ビューには自動的に反映されます。別のステップを踏んで、JSONファイルに色を保存して、コントローラーが新しい色を追加したいときにJSONファイルをフェッチして更新することができます。

フィドル:https://jsfiddle.net/oyt1jzjw/

function ColorsCtrl() { 
    var self = this; 
    self.colors = ['Red', 'Green', 'Pink']; 
    self.changeColor = changeColor; 

    function changeColor(color) { 
    self.colorSelected = color; 
    } 
} 

<div ng-repeat="color in ctrl.colors"> 
    <input type="radio" name="color" ng-click="ctrl.changeColor(color)">{{color}} 
</div> 

<hr> 

<div ng-class="ctrl.colorSelected"> 
    Stuff Here 
</div> 

<div ng-class="ctrl.colorSelected"> 
    Stuff Here 
</div> 

ページの背景色を変更する起動したい場合は、私はDOMを操作するためのディレクティブを使用してではなく、コントローラでこれをしようとお勧めします。

+0

こんにちは、これはスーパーも役に立ちました。私はその機能についてもっと見ていきます。非常に効率的です。私はまだ非常に初心者ですので、まだ機能していない!しかし、素晴らしいソリューションをありがとう。 –

関連する問題