2016-11-03 3 views
0

Я пытаюсь отключить директиву ng-click. У меня есть этот сценарий, я называю в кендо сеткиОтключить ng-click

<script type="text/x-kendo-template" id="PnIssueCell"> 
    <span style="white-space: normal" ng-click="vm.Drawing.ID_PN_ISSUE == dataItem.ID_PN_ISSUE || vm.HistoryPopup(vm.Drawing, true)"> 
     {{ dataItem.ID_PN_ISSUE }} 
    </span> 
</script> 

Я хочу, что если условие истинно vm.Drawing.ID_PN_ISSUE == dataItem.ID_PN_ISSUE действие должно быть включено.

Но что-то не работает правильно, на самом деле строка всегда доступна для кликов.

Любое предложение?

Большое спасибо

+0

Можете ли вы попробовать 'vm.Drawing.ID_PN_ISSUE === dataItem.ID_PN_ISSUE' – sisyphus

ответ

3

Просто небольшая коррекция в вашем коде. Здесь я сначала оцениваю ваше выражение, если оно равно true. он выполняет вашу функцию, иначе это не так.

<script type="text/x-kendo-template" id="PnIssueCell"> 
    <span style="white-space: normal" ng-click="(vm.Drawing.ID_PN_ISSUE == dataItem.ID_PN_ISSUE)?vm.HistoryPopup(vm.Drawing, true):null "> 
     {{ dataItem.ID_PN_ISSUE }} 
    </span> 
</script> 

Надеется, что это помогает :)

Более конкретное решение для вашей проблемы:

Как мы уже говорили в комментариях, Вы хотите удалить значок (значок руки) указателя на что элемент, тогда вы можете попробовать с кнопка элемент вместо span.

<script type="text/x-kendo-template" id="PnIssueCell"> 
    <button type="button" style="white-space: normal" ng-click="vm.HistoryPopup(vm.Drawing, true)" ng-disabled="!(vm.Drawing.ID_PN_ISSUE == dataItem.ID_PN_ISSUE)"> 
     {{ dataItem.ID_PN_ISSUE }} 
    </button> 
</script> 

Теперь вам не нужно беспокоиться об отключении нг нажмите потому, что здесь, когда выражение является ложным, мы отключив кнопку, которая означает, что мы не позволяем любые действия, кликах и в то же время , браузер автоматически изменяет указатель icon to стрелка, так как это отключенная кнопка.

+0

Хорошо работает с тройным оператором. Но если я хочу удалить значок руки? Что мне делать? Потому что мне не нужен значок руки, а затем, если кто-то щелкнет, ничего не произойдет – Galma88

+0

Тогда самое лучшее, что вы можете сделать, вместо использования «span», вы можете использовать кнопку «button», и вы можете использовать одно и то же условие с ng- отключено, поэтому, когда выражение истинно, кнопка будет включена, иначе она будет отключена. Поэтому, если кнопка отключена, автоматически браузер удаляет значок руки. то вам даже не нужно беспокоиться об отключении ng-click, потому что браузер автоматически отключает все действия на этой кнопке. –

+1

Если хотите, я могу дать вам обновленное решение. –

2

Вы должны использовать && вместо || для примера, чтобы работать. Или использовать тройной оператор (condition ? action : null)

В противном случае, если вы делаете это часто, вы можете создать директиву, чтобы отключить событие щелчка и добавить другие функции (например, переключаясь некоторые CSS класс, чтобы показать, что действие отключено).

Нечто подобное.

HTML код

<span disable-if="vm.Drawing.ID_PN_ISSUE != dataItem.ID_PN_ISSUE" 
     ng-click="vm.HistoryPopup(vm.Drawing, true)"> 
    {{ dataItem.ID_PN_ISSUE }} 
</span> 

Javscript Код

.directive('disableIf', function() { 
    var inhibitHandler = function(event) { 
     event.stopImmediatePropagation(); 
     event.preventDefault(); 
     return false; 
    }; 

    return { 
     retrict: 'A', 
     priority: 100, 
     scope: { disableIf: "=" }, 
     link: function($scope, element) { 
      $scope.$watch('disableIf', function(disable) { 
       if (disable) { 
        element.addClass('disabled') 
        element.on('click', inhibitHandler); 
       } 
       else { 
        element.removeClass('disabled') 
        element.off('click', inhibitHandler); 
       } 

       // you may want to add a handler to remove the 
       // event listener when the scope is destroyed 
      }); 
     } 
    } 
}) 
+0

Хорошо работает с тройным оператором. Но если я хочу удалить значок руки? Что мне делать? – Galma88

+0

Либо используйте ng-стиль с другим тернарным оператором, либо реализуйте директиву, такую ​​как предоставленный пример, который делает это для вас. – Eloims

0

Почему вы не просто обернуть HistoryPopup функцию и vm.Drawing.ID_PN_ISSUE == dataItem.ID_PN_ISSUE состояние в отдельную функцию? Если условие истинно, тогда вызовите функцию.

Внешний вид (например, ваш шаблон html) не должен содержать логику или включать в нее контроллеры.

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