2014-12-03 5 views
0

У меня есть Угловая директива, которая содержит форму с проверкой. Я хочу иметь кнопку в моем представлении, которая отключается, когда форма этой директивы $pristine, но кнопка существует в представлении на уровне контроллера, поэтому у меня нет доступа к дочерней форме внутри директивы.Как получить доступ к форме в директиве от контроллера?

Как я могу получить доступ к форме внутри директивы от родительского контроллера, не выполняя какой-то странный взлом?

ответ

0

Вот один прекрасный способ сделать это. Выведите контрольный контроллер, как и в форме, путем выставления объекта FormController в текущей области. Так как ваша директива создает изолированную сферу, то код будет выглядеть следующим образом:

controller:function($scope, $element, $attrs) { 
    $scope.$parent[$attrs.myDirectiveName]=this; // Exposes the directive controller on the parent scope with name myDirectiveName 

    // Now you can define a function that tells state of the form. Or expose the form on the controller 
    this.isPristine=function() { 
     return $scope.formName.$pristine; 
    } 
} 

После того, как контроллер директивы есть, вы приложите директиву к HTML элементу и контроллер доступен на текущей области.

<div my-directive='mydir'></div> // create a property $scope.mydir on current scope.

Теперь вы можете проверить состояние с помощью $scope.mydir.isPristine()

+0

Это сработает, но не против того, как угловой хочет использовать? –

+0

Не знаете, что вы подразумеваете под этим. При таком подходе вы раскрываете API-интерфейс с помощью контроллера, добавляемого в область действия. Это похоже на то, как это делает Угловая директива 'form'. – Chandermani

0

Почему бы не просто добавить к кнопке нг отключенной

Fiddle: http://jsfiddle.net/4vhsmdcn/

<div ng-controller="MyCtrl"> 
    <form name="bob"> 
     <input name="some" type="text" ng-model="pie"/> 
     <button ng-disabled="bob.$pristine">Submit</button> 
    </form> 

</div> 
+0

Как я уже говорил, форма существует ВНУТРИ директивы, что означает, что сфера его FormController существует в этой директиве только поскольку она использует изолированную сферу –

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