我有以下情况:
在我的应用中,我有一个测验,我将得分和当前问题存储为$scope.current
,$scope.score
,MainCtrl
,然后我有一个问题指示,我在哪里显示问题以及如下选择:
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
?
有人可以用最好的方式解释我吗?
答案 0 :(得分:1)
如果您有指令并且想要更新父控制器范围,我认为最好使用带有点.
的模型
为此你需要在父控制器中改变模型
$scope.quiz = {
score: 0
current: 0
}
然后在指令中你可以做
$scope.quiz.score = 'whatever, really'
$scope.quiz.current = 'current index'
如果您引用类似quiz.score
的模型,则它不会在当前范围内创建score
,而是会找到父模型quiz
并更改score
< / p>
希望有意义