2016-02-11 4 views
1

Я хочу отключить кнопку, основанную на изменениях области.Угловая директива set scope watch to disabled button

Вот мой текущий код директивы:

function disabledButton(){ 
    return { 
     restrict: 'EA', 
     priority:1001, 
     scope:{ 
      isLoading: '=loading' 
     }, 
     link:(scope, element, attrs, isLoading)=>{ 
      scope.$watch('isLoading',() => { 
       element.attr('disabled', true); 
      }); 
     } 
    } 
} 

мой HTML:

<button type="submit" class="pull-right" disabled-button>Update</button> 

My Controller только простой:

Но это не работает. Кнопка не отключена.

Любое решение?

JSfiddle https://jsfiddle.net/ssuhat/gp6tq0Lt/7/

+0

Просьба JSFiddle с вашим кодом. – tomepejo

ответ

1

link и compile не работают вместе.

В объекте определения директивы, если вы определяете только ссылку, это означает сокращение от пустой функции компиляции с пустой функцией preLink с кодом в функции postLink. Как только вы определяете compile, link игнорируется угловым, потому что compile должен возвращать функции связывания.

Если вы возвращаете только одну функцию из compile, она будет выполнена после связи.

angular.module('app', []) 
 
    .controller('myctrl', function($scope, $timeout) { 
 
    $scope.loading = true; 
 
    $scope.change = function() { 
 
     $scope.loading = !$scope.loading; 
 
    } 
 
    }) 
 
    .directive('disabledButton', function() { 
 
    return { 
 
     restrict: 'AE', 
 
     scope: { 
 
     isLoading: '=' 
 
     }, 
 
     compile: function() { 
 
     return function(scope, element, attrs) { 
 
      console.log(element); 
 
      var loading = scope.isLoading; 
 
      scope.$watch('isLoading', function(a, b) { 
 
      element.attr('disabled', a); 
 
      }); 
 
     } 
 
     } 
 
    } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="app"> 
 
    <div ng-controller="myctrl"> 
 
    <button ng-click="change()">dsa</button> 
 
    <div class="row"> 
 
     <button is-loading="loading" disabled-button>Update</button> 
 
    </div> 
 
    </div> 
 
</div>

+0

Я пытаюсь обновить его, как это https://jsfiddle.net/ssuhat/gp6tq0Lt/13/, почему кнопка не может переключаться ?. Но console.log продолжает получать обновление – ssuhat

+0

OK попробуйте это: https://jsfiddle.net/gp6tq0Lt/15/ – Przemek

+0

Проблема в том, что вы не добавили в свою кнопку атрибут «отключен» HTML – Przemek

0

Попробуйте использовать ngDisabled директиву, представленную AngularJS.

<button ng-model="button" ng-disabled="isLoading">Button</button> 
+0

Привет. Извините, но это будет мой последний вариант. Я стараюсь, чтобы моя директива html clean using. поэтому я могу назвать это динамически. Спасибо – ssuhat

+0

ng-disabled - это директива, см. Https://docs.angularjs.org/api/ng/directive/ngDisabled –

+0

Да. Я старался не оставлять ng-disabled каждую кнопку, которую у меня есть. Благодарю. – ssuhat

0

Использование element.prop('disabled', true); вместо element.attr('disabled', true);

Также убедитесь, что добавить еще заявление в $watch заявлении включить кнопку повторно.

+0

Я положил это, как вы предлагаете. Но это не работает. – ssuhat