Angular JS,从指令中的controller更新$ scope

时间:2015-10-19 11:11:19

标签: javascript angularjs

我有以下情况:

在我的应用中,我有一个测验,我将得分和当前问题存储为$scope.current$scope.scoreMainCtrl,然后我有一个问题指示,我在哪里显示问题以及如下选择:

angular.module('quiz')
    .directive('myQuestion', function() {
        return {
            restrict: 'EA',
            replace: true,
            scope: {
                question: '=',
                index: '='           
            },

        link: function(scope) {



            scope.validate = function(index) {
                var isCorrect = index === scope.question.correct;

                if(isCorrect) {
                    console.log('Correct!');


                    //$scope.score += 10 ($scope score from MainCtrl)

                }

                if(!isCorrect) {
                    console.log('Incorrect!');

                    scope.correct = false;
                }

                //$scope.current += 1;

            };


            templateUrl: 'assets/javascript/tpl/question.html'
        };
    });

在我的html中,我有以下结构:

<div class="quiz">

<h2>Current Question: {{current}}</h2>
<h2>Your score: {{score}}</h2>

<my-question ng-repeat="q in questions track by $index"
             ng-if="isCurrent($index)" //in controller i compare $index with $scope.current
             question="q"
             index="$index"></my-question>

</div>

我的问题是,如何从指令链接功能更新$scope.score$scope.current

有人可以用最好的方式解释我吗?

1 个答案:

答案 0 :(得分:1)

如果您有指令并且想要更新父控制器范围,我认为最好使用带有点.的模型

为此你需要在父控制器中改变模型

$scope.quiz = {
  score: 0
  current: 0
}

然后在指令中你可以做

$scope.quiz.score = 'whatever, really'
$scope.quiz.current = 'current index'

如果您引用类似quiz.score的模型,则它不会在当前范围内创建score,而是会找到父模型quiz并更改score < / p>

希望有意义