Я работаю над угловым проектом, и я использую директиву для создания изолированного пространства. Директива выглядит следующим образом:Bind model to function call return value
var directive = module.directive('question', function() {
return {
restrict: 'E',
templateUrl: 'question.html',
transclude: true,
scope: {
quiz: '=quiz'
},
link: function (scope, attr, element) {
scope.$watch(function() {
return scope.quiz;
},
function (oldVal, newVal) {
scope.currentQuestion = scope.quiz;
});
}
};
});
Ибо я не хочу, чтобы связать со свойством (или поле) в моем контроллере я создал функцию и вызовите директиву следующим образом:
<question quiz="quiz.getCurrentQuestion()">... (transcluding stuff)</question>
Пожалуйста обратите внимание, что quiz
является моим контроллером, используя as
-Syntax.
Способ обработки директивы работает, но мне не нравится создавать двустороннюю привязку (к R-значению?).
Теперь я попытался просто передать функцию, используя &
-связывание, но это только показывает нечетные результаты в функции link
и разбивает все.
Могу ли я использовать функциональное связывание с помощью &
и как-то вызвать функцию (в моем шаблоне или в функции link
), чтобы получить результат, мне нужно заставить его работать как двусторонняя привязка?
Благодарим за помощь.
EDIT
Значение возвращение getCurrentQuestion
-функции это объект, который выглядит как
{ questionNumber: 1, answers: [], getQuestionText() : function(...), ... }
Так ничего особенного, я надеюсь ...
EDIT 2
Когда я использую
...
scope: {
quiz: '&quiz'
}
затем в $watch
-функции я
function(locals) { return parentGet(scope, locals); }
для scope.quiz
И если я вызываю функцию как scope.quiz()
я получаю undefined
как результат.
Можете ли вы привести пример ответа quiz.getCurrentQuestion()? –
Вы могли бы создать plunkr? –
@PankajParkar Извините, нет, я не должен, это производственный код, и я прошу только за любопытство ... –