2014-09-12 2 views
0

Я использую переключатель флажка, основанный на переключателе начальной загрузки (здесь: https://tictail.com/developers/documentation/uikit/#Switches).ng-show не работает с переключателем флажка

Я хочу использовать нг-шоу на элемент так же, как в примере здесь: https://docs.angularjs.org/api/ng/directive/ngShow

Однако ничего не происходит, когда я нажимаю на коммутаторе (установите флажок привязанную к коммутатору).

Я использовал существующий plunker поставить этот вопрос в правильном контексте: http://embed.plnkr.co/LRSGXqxjtbYcr6rjTj69/

HTML:

<fieldset> 
    <legend>Test switch</legend> 
    <div class="form-group"> 
    <label for="testSwitch">Test switch</label><br> 
    <div class="switch" init-switch> 
     <input type="checkbox" ng-model="testSwitch"> 
    </div> 
    </div> 
</fieldset> 

<fieldset ng-show="testSwitch"> 
... 

Спасибо!

+1

Что именно вы хотите показать и скрыть? потому что единственное, что я вижу, это набор полей с меткой и флажком. – user3811714

+0

Если вы говорите о флажке в контакте/помощи, то он работает отлично. –

+0

ваш причудливый переключатель вообще не переключается, см. Здесь http://plnkr.co/edit/VaqEOLhJMVa4jvCmqKx8?p=preview – sylwester

ответ

1

Пожалуйста, имейте в виду, что я новичок в Угловое так что это не может быть лучшим ответом.

Я думаю, что независимо от того, что делает плагин Switch, это предотвращает изменение значения на флажке (или распространяется на угловое).

Я думаю, что вы можете сделать это по вашей директиве, связать что-то с событием изменения и использовать область выделения в директиве, чтобы сделать двустороннюю привязку к переменной из элемента управления.

HTML:

<div class="switch" init-switch switch-variable="testSwitch"> 
    <input type="checkbox" id="check"> 
</div> 

Переключатель переменным будет делать 2-полосные связывания с директивой

Директива:

app.directive('initSwitch', function() { 
     return { 
      scope: { 
       switchVariable: '=' //this is how you define 2way binding with whatever is passed on the switch-variable attribute 
      }, 
      link: function (scope, element, attr) { 
       scope.$evalAsync(function() { 
        element.switch(); 
       }); 

       element.on("change", function(){ 
        if(scope.switchVariable) 
        scope.switchVariable = !scope.switchVariable 
        else 
        scope.switchVariable = true; 

        scope.$apply(); //I believe you need this to propagate the changes 
       }); 
      } 
     } 
    }); 

Edit:

Согласно вашему первому комментарий, вы можете попытаться изменить событие директивы для:

element.on("change", function(){ 
    if(element.children('.switch-off')[0]) //Looking for the class that determines to what side the switch is 
    scope.switchVariable = false; 
    else 
    scope.switchVariable = true; 
    scope.$apply(); //I believe you need this to propagate the changes 
}); 

Что касается второго пункта, если вы установите флажок установлен, то нуждается в вашей функции ссылку, чтобы узнать состояние чекбокса:

scope.$evalAsync(function() { 
    scope.switchVariable = element.children()[0].checked; //check if checkbox is checked (before the plugin changes the DOM 

    element.switch(); //initialize the plugin 
}); 
+0

Только то, что я искал! Ценю вашу помощь. Благодаря! – peta

+0

Кажется, что иногда, если я нажимаю очень быстро, он заканчивается «обратным», поэтому ng-show истинно, даже если переключатель установлен на «нет». Любые идеи, почему это происходит? – peta

+0

Также я заметил, что если я установил флажок для проверки при загрузке, как , переключатель будет установлен на "yes", но ng-show будет false, и если я привяжу еще один регулярный флажок, чтобы сохранить отслеживать то, что действительно происходит с коммутатором, оно не проверяется. Поэтому кажется, что он работает только, если я нажимаю переключатель, и не слишком быстро. – peta

2

Вы должны ввести свой код в ng-приложение, чтобы он знал, что это угловое приложение.

<div ng-app="myApp"> 
     <fieldset> 
      <legend>Test switch</legend> 
      <div class="form-group" > 
       <label for="testSwitch">Test switch</label><br> 
       <div class="switch"> 
        <input type="checkbox" ng-model="testSwitch"/> 
       </div> 
      </div> 
     </fieldset> 
     <h1 ng-show="testSwitch">Now you see me</h1> 
    </div> 

http://jsfiddle.net/df1gz8jk/1/

+0

Существует 'ng-app = 'myApp'' 3-я строка в' index.html' – MiTa

Смежные вопросы