2016-01-05 3 views
0

Я пытаюсь реализовать директиву AngularJS, у которой есть собственная изолированная область, чтобы сделать ее повторно используемой на той же странице. Эта директива описывается шаблоном, который находится в другом файле, поэтому я использую параметр templateUrl.Доступ к области шаблонов из выделенной области

app.directive('inputSettings', function() { 
    return { 
     restrict: 'E', 
     transclude: true, 
     templateUrl: 'templates/admin/inputSettingsTemplate.html', 
     controller: 'InputSettingsCtrl', 
     scope: { 
      settingkey: '=', 
      value: '=', 
      range: '=', 
      check: '=', 
      autosave: '=' 
     } 
    }; 
}); 

В этом шаблоне у меня есть форма с именем form.

<form name="form" class="settingForm" novalidate> 
    <div class="form-group" ng-class="{ 'has-error' : form.input.$invalid, 'has-success' : form.input.$valid }"> 
     <input class="form-control" name="input" type="text" ng-model="valueInput" /> 
     <p ng-show="form.input.$invalid && !form.input.$pristine" class="help-block" translate="{{ 'inputSettingErrorMessage' | translate:translationData }}"></p> 
    </div> 
</form> 

У меня есть проблема в том, что я хочу, чтобы иметь возможность установить правильность ввода внутри шаблона, используя код, подобный приведенному ниже, в контроллере моей директивы:

$scope.form.input.$setValidity("input", true); 

Но я имеют ошибку при попытке выполнить такой код. Кажется, что $scope не знает форму, поэтому я не могу взаимодействовать с моей формой внутри контроллера моей директивы.

Есть ли у вас какие-либо идеи? Я что-то не так сделал?

Заранее благодарен!

+0

Когда вы пытаетесь выполнить этот код? непосредственно во время инициализации контроллера? – FreeCandies

+0

Нет в наблюдателе переменной $ scope.valueInput. Фактически, я хочу обновить действительность ввода при изменении значения. –

+0

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

ответ

1

На самом деле мне удалось сделать мой код работает с минимальное количество изменений. Я не знаю, является ли это хорошим ответом, но он работает как прелесть для меня.

Я просто заменил тег <form><ng-form>, и теперь он отлично работает. Это означает, что контроллер моей директивы теперь может получить доступ к форме по имени.

+1

был ли вы директивой внутри другой

тег? Это объясняет проблему – FreeCandies

+0

Да, это так!Я предполагаю, что существует конфликт между родительской формой и директивой. Это плохая идея иметь вложенные формы? Должен ли я удалить его в моей директиве шаблона? –

+1

Ng-форма позволяет вложенность, где нет формы. Форма должна быть только самой верхней и может иметь любое количество или глубину детей в форме ng. – FreeCandies

-2

Используйте $ rootScope. Это глобально. Он содержит все $ SCOPES .. Like

$rootScope.data = data; $scope.data = $rootScope.data 
0

Вообще в директиве, чтобы установить справедливость элемента мы требуем ngModel для директивы, а затем попытаться установить $ валидность элемента с помощью ngModelController

+0

У вас есть пример, который позволил бы мне понять, что вы имеете в виду? Заранее спасибо. –

+0

https://gist.github.com/aneeshwp/e771523bfce94dde9e58 вот пример –

0

У вас есть контроллер для этого каталога, вы можете использовать этот контроллер для управления данными.

function InputSettingsCtrl(){ 
    var vm = this; 
    console.log(vm); 
} 

Также не забудьте добавить controllerAs к вашей директиве

controllerAs: 'ctrl', 

Как это можно связать переменную из контроллера в представление

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