Javascript 将模型绑定到函数调用返回值
我正在处理一个角度项目,我使用一个指令来创建一个独立的范围。该指令如下所示:Javascript 将模型绑定到函数调用返回值,javascript,angularjs,data-binding,Javascript,Angularjs,Data Binding,我正在处理一个角度项目,我使用一个指令来创建一个独立的范围。该指令如下所示: var directive = module.directive('question', function () { return { restrict: 'E', templateUrl: 'question.html', transclude: true, scope: { quiz: '=quiz' }
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>
然后在$watch
-函数中
function(locals){returnparentget(scope,locals);}
forscope.quick
如果我调用像
scope.quick()这样的函数,我会得到未定义的。找不到任何方法来查看作用域绑定中的函数。然而,还有其他解决办法。如果需要单向绑定,可以使用“@”,但这意味着您必须在watch()中解析JSON:
它可以工作,但是如果你有一个高更新率,开销可能会很烦人。我要做的是,使用一个包含所有问题的服务,控制器和指令都可以与之对话。当更改当前问题时,控制器应仅将新问题的id传递给指令(使用simple@bind),指令将查询该问题的服务。能否给出quick.getCurrentQuestion()的响应示例?能否创建一个plunkr?@PankajParkar抱歉,不,我不能,这是生产代码,我只是出于好奇…缺少一个开始引用(templateUrl)选项,请修复它(我无法编辑它,不允许编辑这么短的内容)。@plamut谢谢你的提示,我在复制代码之前更改了路径,在我的源代码中,有一个“+1”表示想法!我没有想到我自己会让另一个服务提供这些问题。我要试试看!
...
scope: {
quiz: '&quiz'
}
var directive = module.directive('question', function () {
return {
restrict: 'E',
templateUrl: 'question.html',
transclude: true,
scope: {
quiz: '@'
},
link: function (scope, attr, element) {
scope.$watch('quiz', function (newVal, oldVal) {
scope.currentQuestion = angular.fromJson(newVal);
});
}
};
});