gpt4 book ai didi

dart - 如何在子 Controller 中更新父 Controller 变量

转载 作者:行者123 更新时间:2023-12-03 03:46:49 25 4
gpt4 key购买 nike

在父 Controller 中,如下所示:

@NgController(
selector: '[main-ctrl]',
publishAs: 'ctrl')
class MainController {
Scope scope;
bool showHeaderFooter=false;
}

在子 Controller 中,如何更新 showHeaderFooter 变量?

@NgController(
selector: '[login-ctrl]',
publishAs: 'login')
class LoginController {
Scope scope;
NgRoutingHelper routingHelper;
var username, pwd;

LoginController(this.routingHelper,this.scope);

void login(){
if(username!=null&&pwd!=null){
routingHelper.router.go('welcome', {});
scope.parentScope.showHeaderFooter=true;
}
}
}

此代码无法正常工作。

最佳答案

有几种可能性。

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


    @NgController(
    selector: '[main-ctrl]',
    publishAs: 'ctrl')
    class MainController {
    Scope scope;
    bool showHeaderFooter=false;
    MainController(this.scope) {

    // approach using emit
    scope.on('login').listen((e) => showHeaderFooter = e.data);

    // approach using scope.context
    scope.context['mainCtrl'] = this;

    // just for demonstration
    new Timer.periodic(new Duration(seconds: 1), (e) => print(showHeaderFooter));
    }

    }

    @NgController(
    selector: '[login-ctrl]',
    publishAs: 'login')
    class LoginController {
    Scope scope;
    NgRoutingHelper routingHelper;
    var username, pwd;

    LoginController(this.routingHelper,this.scope);

    void login(){
    // if(username!=null&&pwd!=null){
    //routingHelper.router.go('welcome', {});

    // approach using emit
    scope.emit('login', true);

    // approach using scope.context
    (scope.parentScope.context['mainCtrl'] as MainController).showHeaderFooter=true;
    // }
    }
    }

    或者如果你 MainController有一个独特的 publishAs@NgTwoWay('showHeaderFooter')注释你可以只创建一个绑定(bind)。

    关于dart - 如何在子 Controller 中更新父 Controller 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22976611/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com