Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将模型绑定到函数调用返回值_Javascript_Angularjs_Data Binding - Fatal编程技术网

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);}
for
scope.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);
            });
        }
    };
});