0

У меня есть кнопка, которая меняет «активное» состояние. Во-первых, он загружает состояние с сервераМетод управления вызовом из директивы

<button active="data.active" ng-click="changeStatus()"></button> 

директива Код:

app.directive('active', function() { 
    return { 
    restrict: 'A', 
    templateUrl: 'whatever.html', 
    scope: { 
     active: '=' 
    }, 
    link: function($scope, elem, attrs) { 
     $scope.changeStatus = function() { 
      // Actually I'm doing this, it works fine 
      var value = !$scope.active; 

      $scope.$parent.MethodWhoChangesState(value, function(response) { 
       // I need to change the button state here 
      }); 
     } 
    } 
    } 
}) 

Это работает, но я думаю, что я не уважая «угловых-х правил» ...

Есть ли лучший способ?

+0

Вы должны передать вашу функцию с помощью атрибута и привязать его к области с помощью '&' – jcubic

+0

всегда хорошо, чтобы оценить если вам действительно нужна изолированная область. Если нет, ваша директива уже будет в родительском поле. – charlietfl

+0

@charlietfl Если он не создает новую область с attr biding, тогда ему нужно будет дважды связать себя. – jcubic

ответ

0

Обычно вам нужно обновить переменную $ scope в обработчике кликов. Если вам нужно обработать случай, когда «активные» изменения состояния, вы можете настроить $ часы:

app.directive('active', function() { 
    return { 
    restrict: 'A', 
    templateUrl: 'whatever.html', 
    scope: { 
     active: '=' 
    }, 
    link: function($scope, elem, attrs) { 

     // if you need to run custom code whenever the 'active' state changes 
     // you can set up a $watch 
     $scope.$watch('active', function(isActive) { 
       if(isActive) { 
        ... 
       } 
       else { 
        ... 
       } 
     }); 

     $scope.changeStatus = function() { 

      $scope.active = !$scope.active; 
     } 
    } 
    } 
}) 
+0

Мне нужно вызвать функцию из $ parent scope, кроме того, если я ставлю этот вызов внутри $ watch, я думаю, что он будет выполняться, когда директива будет отображаться в первый раз. – Ulrira

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