2
コントローラで親をまっすぐにしようとすると、なぜ私はundefined
が得られますか?私が関数内で使用すると、うまく動作します。角度の入れ子にされたコンポーネントの親が定義されていません
var sidebar = {
transclude: true,
bindings: {
isOpen: '='
},
controller: function() {
function toggle() {
//this.isOpen = !this.isOpen;
console.log('my test');
}
this.toggle = toggle;
},
template: ['$element', '$attrs',function ($element, $attrs) {
return [
'<div class="sidebars" ng-transclude>',
'</div>'
].join('');
}]
};
var sidebarItem = {
require: {
parent: '^sidebar'
},
bindings: {
header: '='
},
controller: function() {
function mytest() {
// this works
console.log('isOpen is ',this.parent.isOpen);
this.parent.toggle();
}
// here I got Parent is undefined
console.log('Parent is ',this.parent);
//this.parent.toggle();
this.mytest = mytest;
},
template: ['$element', '$attrs',function ($element, $attrs) {
return [
'<div class="sidebar__item">',
'<h3 ng-click="$ctrl.mytest();">{{$ctrl.header}}</span>',
'<ul>',
'<li>Test</li>',
'</ul>',
'</div>'
].join('');
}]
};
angular.module('layout.directives', [])
.component('sidebar', sidebar)
.component('sidebarItem', sidebarItem);
AFAIK、あなた自身のスコープで親スコープに角度をつけてアクセスするので、this.parentの代わりに、this.$スコープを使ってアクセスします。$ parent – Izuel
これは$との微妙な違いスコープとこれ。この質問を参照してくださいhttp://stackoverflow.com/questions/11605917/this-vs-scope-in-angularjs-controllers実際に関数のthis.parentを参照しているという事実 – Katana24