У меня есть простой контроллер:Ng-модель не работает для директивы атрибута
.controller("TestController",['$scope', function($scope) {
this.p = {};
this.p.name = "Foo";
this.p.surname = "Bar";
}]);
И у меня есть директива, призывающую этот контроллер:
app.directive('cronosDataset',[function() {
return {
restrict: 'A',
controller:'TestController',
controllerAs: "ctrl",
scope: {
cronosDataset : "@"
}
};
}])
Если я позвоню контроллеру с помощью нг-контроллера в ng-model
отлично работает. Но если я называю это через директивы она не обновляет вид:
<!-- This works -->
Works
<br/>
<div class="sideMenu">
<form ng-controller="TestController as ctrl">
Name: <input type="text" ng-model="ctrl.p.name" />
Surname: <input type="text" ng-model="ctrl.p.surname" />
</form>
</div>
<!-- This one doesn't work -->
Doesn't work
<br/>
<div class="sideMenu">
<form cronos-dataset="People">
Name2: <input type="text" ng-model="ctrl.p.name" />
Surname2: <input type="text" ng-model="ctrl.p.surname" />
</form>
</div>
Edit: я могу заставить его работать, если я не использую изолированный объем (scope : {...}
в определении директивы). Я использую только изолированную область, чтобы иметь доступ к этому атрибуту scope: { cronosDataset : "@" }
внутри моего контроллера. Если есть другой способ сделать это без использования изолированной области, то проблема решена!
То, что я пытаюсь архив повторно использовать логику, я сделал, чтобы получить данные из примера базы данных:
<form cronos-dataset="People"><input type="text" ng-model="p.name" /></form>
<form cronos-dataset="Car"><input type="text" ng-model="p.model" /></form>
<form cronos-dataset="Address"><input type="text" ng-model="p.street" /></form>
В моем контроллере я иду к database
(Ajax с использованием cronos-dataset
в качестве параметра запроса) и положить результат возвращается в p
переменной. Поэтому мне нужны две вещи:
1 - Have access to attribute inside the controller
2 - Update the ng-model with a scope variable
Имеет ли смысл?
Вот PLUNKER
Директива определяет изолированный объем, поэтому 'ctrl' недоступен. –
Является ли это способом сделать область действия директивы доступной для дочерних узлов? – nanndoj
Вам действительно нужна изолированная область? – charlietfl