2016-04-11 11 views
0

私はここに(おそらく)スコープの大きな問題がありますが、私はそれを見ることができません。私は他のボタンはすでに、私はこのサイトからそれを採用しようとしたそうであるように私自身のCSS-修正tooglebuttonsは、同じように動作させたい角度チェックボタンの動作が間違っている

http://jsfiddle.net/opensas/ye6At/

は、ここに私の私ですフィドル:

http://jsfiddle.net/fs0tL62s/

私の第二ボタンが値に反応しているが、私は異なり、それを制御することはできません。

Thxです。 私のCSS:

 .onoffswitch { 
    position: relative; 
    width: 92px; 
    -webkit-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
} 

.onoffswitch-checkbox { 
    display: none; 
} 

.onoffswitch-label { 
    display: block; 
    overflow: hidden; 
    cursor: pointer; 
    border: 2px solid #999999; 
    border-radius: 20px; 
} 

.onoffswitch-inner { 
    display: block; 
    width: 200%; 
    margin-left: -100%; 
    transition: margin 0.3s ease-in 0s; 
} 

.onoffswitch-inner:before, 
.onoffswitch-inner:after { 
    display: block; 
    float: left; 
    width: 50%; 
    height: 30px; 
    padding: 0; 
    line-height: 30px; 
    font-size: 12px; 
    color: white; 
    font-family: Trebuchet, Arial, sans-serif; 
    font-weight: bold; 
    box-sizing: border-box; 
} 

.onoffswitch-inner:before { 
    content: "Local"; 
    padding-left: 10px; 
    background-color: #34A7C1; 
    color: #FFFFFF; 
} 

.onoffswitch-inner:after { 
    content: "Remote"; 
    padding-right: 10px; 
    background-color: #EEEEEE; 
    color: #999999; 
    text-align: right; 
} 

.onoffswitch-switch { 
    display: block; 
    width: 22px; 
    margin: 4px; 
    background: #FFFFFF; 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    right: 58px; 
    border: 2px solid #999999; 
    border-radius: 20px; 
    transition: all 0.3s ease-in 0s; 
} 

.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { 
    margin-left: 0; 
} 

.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { 
    right: 0px; 
} 

私のJS:

私のコードは次のようである

angular.module('bootstrap', []).directive('button', function() { 
return { 
restrict: 'E', 
require: 'ngModel', 
link: function($scope, element, attr, ctrl) { 

    // ignore other kind of button groups (e.g. buttons-radio) 
    if (!element.parent('[data-toggle="buttons-checkbox"].btn-group').length) { 
    return; 
    } 

    // set/unset 'active' class when model changes 
    $scope.$watch(attr.ngModel, function(newValue, oldValue) { 
    element.toggleClass('active', ctrl.$viewValue); 
    }); 

    // update model when button is clicked 
    element.bind('click', function(e) { 
    $scope.$apply(function(scope) { 
     ctrl.$setViewValue(!ctrl.$viewValue); 
    }); 

    // don't let Bootstrap.js catch this event, 
    // as we are overriding its data-toggle behavior. 
    e.stopPropagation(); 
    }); 
} 
}; 
}); 

angular.module('sample', ['bootstrap']); 

function SampleController($scope) { 
console.log('model'); 
$scope.myModel = { 
}; 
} 

と私のhtml:あなたは、IDの衝突を持って

<div ng-app="sample" ng-controller="SampleController"> 
<ul> 
<li>myModel.optionA:{{myModel.optionA}}</li> 
<li>myModel.optionB: {{myModel.optionB}}</li> 
</ul> 
<form class="form-inline"> 
<label class="checkbox"> 
    <input type="checkbox" ng-model="myModel.optionA"> A 
</label> 
<label class="checkbox"> 
    <input type="checkbox" ng-model="myModel.optionB"> B 
</label> 
</form> 
<div class="btn-group" data-toggle="buttons-checkbox"> 
<button type="button" ng-model="myModel.optionA" class="btn">A</button> 
<button type="button" ng-model="myModel.optionB" class="btn">B</button> 
<div class="onoffswitch"> 
    <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox"  
id="myonoffswitch" checked ng-model="myModel.optionB"> 
    <label class="onoffswitch-label" for="myonoffswitch"> 
    <span class="onoffswitch-inner"></span> 
    <span class="onoffswitch-switch"></span> 
    </label> 
</div> 
<div class="onoffswitch"> 
    <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox"   
    id="myonoffswitch" checked ng-model="myModel.optionA"> 
    <label class="onoffswitch-label" for="myonoffswitch"> 
    <span class="onoffswitch-inner"></span> 
    <span class="onoffswitch-switch"></span> 
    </label> 
</div> 
</div> 
</div> 
+2

チェックアウト[MCVE]とだけ質問リンクを掲示避けます。あなたがJSFiddleへのリンクと付随するコードなしで質問を投稿させる理由はありません。 – Lex

+0

申し訳ありませんが、実際には2倍の情報量とするのは非常に生産的ではないと思いました。 – Andrea

+1

@andreaリンクが時間の経過とともに消えてしまいますので、リンクが壊れても質問としては意味があります。今あなたは知っている。ようこそ、SO: – Nathan

答えて

1

変更最後のボタンのid(およびそのラベルの "for"属性と一致するラベル)を別のものに置き換えて動作させます。

<div class="onoffswitch"> 
    <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch2" checked ng-model="myModel.optionA"> 
    <label class="onoffswitch-label" for="myonoffswitch2"> 
    <span class="onoffswitch-inner"></span> 
    <span class="onoffswitch-switch"></span> 
    </label> 
</div> 

Updated fiddle

+0

これはすでに正しい方向に、私をプッシュ!ありがとう! これは結合されていると考えています...それを見ませんでした。 そのボタンのng-repeatに拡張可能なバージョンを組み込むことは考えていますか?ここでは私のlilプロジェクトの1000%の向上になるでしょう。 – Andrea

+0

@andrea独自の指令を作成したいと思うかもしれません。 http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentalsホープが助ける:) – Nathan

+0

こんにちはネイサン!私はここで答えを見つけました:Thierry Marianneによって提供された http://stackoverflow.com/questions/23655009/how-to-set-the-att-attribute-of-a-html-element-dynamically-with-angular-js 。プレゼンテーション版では、このアプローチで十分です。実際の作業のために、おそらくあなたのシステムにフィードバックします。しかし、時間がかかります。まだ私は週末まで楽しみにしています。本当にありがとう! :) – Andrea

関連する問題