AngularJS访问子指令中的隔离作用域
以下是我的HTML部分:AngularJS访问子指令中的隔离作用域,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,以下是我的HTML部分: <div data-my-question="" data-question="Question text?"> <div data-yes=""> YES! </div> <div data-no=""> NO! </div> </div> 对 不 以下是我的角度指示: angular.module('myModule').di
<div data-my-question="" data-question="Question text?">
<div data-yes="">
YES!
</div>
<div data-no="">
NO!
</div>
</div>
对
不
以下是我的角度指示:
angular.module('myModule').directive('myQuestion', [
function () {
return {
restrict: 'A',
replace: true,
scope: {
question: '@'
},
transclude: true,
controller: function($scope){
$scope.answered = false;
$scope.yesActive = false;
$scope.activateYes = function (yesActive) {
$scope.answered = true;
$scope.yesActive = yesActive;
};
},
template: '<div>' +
'<div class="question-box" ng-class="{answered: answered}">' +
'<div class="question">' +
'{{question}}' +
'</div>' +
'<div class="buttons">' +
'<a href="" class="btn btn-small" ng-click="activateYes(true)">Yes</a>' +
'<a href="" class="btn btn-small" ng-click="activateYes(false)">No</a>' +
'</div>' +
'</div>' +
'<div ng-transclude></div>' +
'</div>'
};
}
])
.directive('yes', [
function () {
return {
restrict: 'A',
replace: true,
transclude: true,
template: '<p ng-show="answered && yesActive" ng-transclude></p>'
};
}
])
.directive('no', [
function () {
return {
restrict: 'A',
replace: true,
transclude: true,
template: '<p ng-show="answered && !yesActive" ng-transclude></p>'
};
}
]);
angular.module('myModule')。指令('myQuestion'[
函数(){
返回{
限制:“A”,
替换:正确,
范围:{
问题:“@”
},
是的,
控制器:功能($scope){
$scope.responsed=false;
$scope.yesActive=false;
$scope.activateEyes=函数(yesActive){
$scope.answered=true;
$scope.yesActive=yesActive;
};
},
模板:“”+
'' +
'' +
“{{问题}}”+
'' +
'' +
'' +
'' +
'' +
'' +
'' +
''
};
}
])
.指令('是'[
函数(){
返回{
限制:“A”,
替换:正确,
是的,
模板:''
};
}
])
.指令('否'[
函数(){
返回{
限制:“A”,
替换:正确,
是的,
模板:''
};
}
]);
问题是,子指令(“yes”、“no”)无法访问父指令中的“answered”和“yesActive”变量,父指令具有独立的作用域
如何实现子指令对父指令的值更改作出反应?被转移的元素将无法访问该指令的隔离范围 Angular就是这样工作的,一个独立的作用域(myQuestion)将不会从任何父对象继承,而被转移的元素(Yes/No)将成为myQuestion作用域的同级 被转移的元素将是定义它们的原始范围的子元素,这样它们仍然能够绑定,而不是被隔离。 如果选中此选项,在控制台中,您将看到Yes/No作用域可以访问$rootScope(定义pizza的地方),而myQuestion的独立作用域则不能 你可以得到更多关于这个的信息 解决方案:
我喜欢简单的代码,因此如果可能的话,我会在问题模板中移动Yes/No元素,但您也可以 谢谢你的解释。我解决了从问题到是/否的广播问题