у меня есть что-то вроде этого:angularjs директива о выходе связывания
.controller('contr',['$scope', '$http',function($scope, $http){
$http.post(...).success(function(){
$scope.myTextVar = "some text here";
$scope.completed == true;
});
}]);
HTML-фрагмент, как так:
<div class="myClass" ng-if="completed == true" manipulate-header>
<p>{{myTextVar}}</p>
</div>
и директивы, для простоты скажем, это выглядит следующим образом:
.directive('manipulateHeader',function(){
return{
restrict: 'A',
link: function(scope, elem){
console.log(angular.element(elem).find('p'));
}
}
});
Директива manipulate-header
должна выполнять некоторые манипуляции с текстом внутри <p></p>
тег, однако он работает до того, как {{myTextVar}}
заменяется, и, следовательно, он выводит {{myTextVar}}
вместо some text here
.
Как я могу обойти эту проблему? (я могу передать переменную внутри области действия директивы, но я думаю, что должен быть другой способ).
EDIT: контроллер работает и работает по назначению. Проблема не связана с этим. Я не включил его, чтобы сократить пост.
Какая манипуляция мы говорим здесь? Если вы дадите нам общую идею, мы сможем определить, есть ли более простой способ исправить вашу проблему (что, похоже, есть) –
Неприемлемо. Даже простой вывод должен выводить замененный текст, а не шаблонный заполнитель. Идея заключается в том, что директива должна запускаться после того, как была проведена привязка текста. –
Это не имеет значения. Очень вероятно, что то, что вы пытаетесь сделать, не означает, что это нужно делать с директивами, а вместо этого с каким-то фильтром. Предварительные, ссылки и пост-ссылки функции директивы выполняются до составления директивы - это их контракт. Единственный способ изменить текст - либо заменить текст внутри элемента, либо изменить переменную области видимости после компиляции. Если вы хотите выполнить некоторую обработку после компиляции, используйте контроллер. –