2014-10-22 2 views
0

У меня есть функция cancel в моем контроллере, которую я хочу передать или привязать к директиве. Эта функция существенно очищает форму. Как это:Расширение функции контроллера в директиве

app.controller('MyCtrl', ['$scope', function($scope){ 

    var self = this; 

    self.cancel = function(){... 
     $scope.formName.$setPristine(); 
    }; 
}]); 

app.directive('customDirective', function() { 

    return { 
     restrict: 'E' 
     scope: { 
      cancel : '&onCancel' 
     }, 
     templateUrl: 'form.html' 
    }; 
}); 

form.html

<div> 
    <form name="formName"> 

    </form> 
</div> 

Однако $ setPristine() не работает в качестве контроллера не имеют доступа на форму DOM. Возможно ли расширить функциональность контроллера cancel в рамках директивы, чтобы я добавил $setPristine()?

Некоторые предложили использовать jQuery для выбора формы DOM (если это единственный способ), как это сделать точно? Есть ли более Угловой способ сделать это?

ответ

1

Поскольку в директиве находится <form>, контроллер не должен иметь к этому никакого отношения. Зная, что это разрушит инкапсуляцию, т. Е. Детали реализации утечки из директивы в контроллер.

Возможным решением было бы передать пустой объект «держатель» в директиву и позволить директиве заполнить его функциями обратного вызова. То есть:

app.controller('MyCtrl', ['$scope', function($scope) { 
    var self = this; 
    $scope.callbacks = {}; 

    self.cancel = function() { 
     if(angular.isFunction($scope.callbacks.cancel)) { 
      $scope.callbacks.cancel(); 
     } 
    }; 
}); 

app.directive('customDirective', function() { 
    return { 
     restrict: 'E' 
     scope: { 
      callbacks: '=' 
     }, 
     templateUrl: 'form.html', 
     link: function(scope) { 
      scope.callbacks.cancel = function() { 
       scope.formName.$setPristine(); 
      }; 

      scope.$on('$destroy', function() { 
       delete scope.callbacks.cancel; 
      }); 
     } 
    }; 
}); 

Используйте его как:

<custom-directive callbacks="callbacks"></custom-directive> 

Я не уверен, что я в порядке с этим либо хотя ...

+0

Должен ли я использовать ' '=' 'в' scope' вместо '' & ''? Я где-то читал, что выражения должны использовать '' & ''. – menorah84

+0

Спасибо, это сработало. Я сохранил «&» для области. – menorah84

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