Dart 如何在子控制器中更新父控制器变量

Dart 如何在子控制器中更新父控制器变量,dart,angular-dart,Dart,Angular Dart,在父控制器中,如下所示: @NgController( 选择器:“[main ctrl]”, publishAs:'ctrl') 类主控制器{ 范围; bool showHeaderFooter=false; } 在子控制器中,如何更新showHeaderFooter变量 @NgController( 选择器:“[login ctrl]”, publishAs:'登录') 类登录控制器{ 范围; NgRoutingHelper routingHelper; var用户名,pwd; LoginC

在父控制器中,如下所示:

@NgController(
选择器:“[main ctrl]”,
publishAs:'ctrl')
类主控制器{
范围;
bool showHeaderFooter=false;
}
在子控制器中,如何更新showHeaderFooter变量

@NgController(
选择器:“[login ctrl]”,
publishAs:'登录')
类登录控制器{
范围;
NgRoutingHelper routingHelper;
var用户名,pwd;
LoginController(this.routingHelper,this.scope);
无效登录(){
如果(用户名!=null&&pwd!=null){
routinghelp.router.go('welcome',{});
scope.parentScope.showHeaderFooter=true;
}
}
}

此代码无法工作。

有几种可能性

  • 使用
    scope.context访问父级

  • MainController
    中,创建
    MainController
    时,将其实例分配给其作用域中的命名属性(在其构造函数中)
  • 您可以通过
    scope.parentScope
    使用from
    LoginController
    访问父范围,然后使用实例分配到的属性
  • 事件使用emit,将
    mainctroller
    分配给scope属性,然后您可以使用访问它

@NgController(
选择器:“[main ctrl]”,
publishAs:'ctrl')
类主控制器{
范围;
bool showHeaderFooter=false;
主控制器(此.scope){
//使用emit的方法
监听((e)=>showHeaderFooter=e.data);
//使用scope.context的方法
scope.context['mainCtrl']=this;
//只是为了示范
新定时器。周期(新持续时间(秒:1),(e)=>打印(showHeaderFooter));
}
}
@NGC控制器(
选择器:“[login ctrl]”,
publishAs:'登录')
类登录控制器{
范围;
NgRoutingHelper routingHelper;
var用户名,pwd;
LoginController(this.routingHelper,this.scope);
无效登录(){
//如果(用户名!=null&&pwd!=null){
//routinghelp.router.go('welcome',{});
//使用emit的方法
emit('login',true);
//使用scope.context的方法
(scope.parentScope.context['mainCtrl']作为主控制器)。showHeaderFooter=true;
//    }
}
}

或者,如果您的
MainController
具有唯一的
publishAs
@NgTwoWay('showHeaderFooter')
注释,您可以创建一个绑定。

您介意修改父控制器以使其成为可能,还是应该让父控制器不知道这一点?@GünterZöchbauer In AngularJs,我们可以使用emit和on event来更改父作用域变量,但我不清楚如何在angular dart中实现这一点。我尝试使用
emit
制作一个简单的示例。你能看一下我当前的答案,也许可以添加一些关于你首选方法的信息。@GünterZöchbauer你的代码还可以,但我不理解“(scope.parentScope.context['mainCtrl']作为MainController)。showHeaderFooter=true;”和“scope.context['mainCtrl']=this;”你能提供更多的信息或文档吗?我在回答的顶部添加了一些解释,但我认为使用
emit
是更好的方法
parentScope
仅当您知道
MainController
实际上是您的直接父范围时才起作用<代码>发射
适用于所有祖先。