2013-07-25 6 views
0

Я использовал следующее решение (принятый ответ), чтобы создать новую директиву для моего списка флажков: How can I get angular.js checkboxes with select/unselect all functionality and indeterminate values?, и я хочу показать следующие кнопки, когда выбран хотя бы один элемент :AngularJS: ng-show с несколькими флажками

<div class="btn-group pull-right mrr5" data-ng-show="masterChecked"> 

    <button class="btn btn-danger"><i class="icon-trash"></i> Remove selected</button> 
    <button class="btn btn-info"><i class="icon-download icon-white"></i> Export selected as .csv</button> 

</div> 

Как вы можете видеть, я использую «данных-нг-шоу» атрибут с «masterChecked», возложенные на него, который установлен в контроллере директивы на основе состояния из ' мастер ':

<input type="checkbox" data-ng-model="master" data-ng-change="masterChange()"> 

но почему-то я проверяю это или нет - кнопки не отображаются. Любая идея, что я могу делать неправильно?

Вот скрипка: http://jsfiddle.net/scabro/Ahe2X/10/

+1

D o у вас есть jsfiddle или plunkr для этого. Это поможет нам помочь :) – dcodesmith

+0

@ dcodesmith - да - только что добавили ссылку в вопрос выше. –

+0

Проблема в том, что '$ scope.masterChecked' не принадлежит' UserController' '$ scope'. Так что это не определено. Он принадлежит контроллеру 'directives' – dcodesmith

ответ

2

кажется, что вы просто пытаетесь проверить значение другой переменной $ Scope (тот, из директивы) в главном контроллере

Для того, чтобы иметь один и тот же один, вы можете передать его в качестве другого атрибута в ваша директива

я позволю вам проверить эту скрипку: http://jsfiddle.net/DotDotDot/Ahe2X/22/

Я только изменил 3 маленькие точки:

во-первых, я создал это значение masterChecked в главном контроллере:

cmdApp.controller('UserController', function($scope) { 
    $scope.masterChecked=false; 
    .... 

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

scope: { checkboxes: '=', masterChecked:"=" }, 

тогда, мы можем назвать директиву с другим атрибутом:

<three-state-checkbox checkboxes="users" class="select-all-cb" master-checked="masterChecked"> 

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

+0

Спасибо @DotDotDot - означает ли это, что мне придется включить '$ scope.masterChecked = false;' в пределах каждого контроллера, который требует этой функциональности? –

+0

В основном это зависит от вашего кода. Концепция здесь заключается в том, чтобы указать директиве манипулировать значением, уже созданным в контроллере, а не новым, которое будет создано только в $ scope.Это будет работать только в том случае, если ваша директива называется где-то, где доступна область полномочий контроллера (это цель 'master-checked =" masterChecked "', вы указываете директиве использовать $ scope.masterChecked текущего контроллера). Если это для другого контроллера, вы должны рассмотреть возможность обмена переменной masterChecked, например, в $ rootScope (не уверен, что это лучшее решение) – DotDotDot

+0

Ну, на самом деле, похоже, мне не нужно добавлять '$ scope.masterChecked = ложь;» к «UserController» - он работает с ним только в директиве :): http://jsfiddle.net/Ahe2X/27/ –

0

Попробуйте fiddle.

Сообщите мне, если это работает для вас или нет, я могу обновить его соответствующим образом.

+0

Только что проверил, не работает должным образом. Все еще смотря @ это – dcodesmith

+0

@dccodesmith - спасибо, например, но это не работает, когда вы нажимаете на мастер-флажок. –