Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何在服务和控制器之间进行双向数据绑定_Dart_Angular Dart - Fatal编程技术网

Dart 如何在服务和控制器之间进行双向数据绑定

Dart 如何在服务和控制器之间进行双向数据绑定,dart,angular-dart,Dart,Angular Dart,我有一个服务,我一直在尝试对控制器中的服务属性之一进行双向绑定。下面是三种不同方法的代码。第一个使用$watch(),第二个使用getter/setter,第三个使用带有@NgTwoWay-binding的属性 我认为第三个是最干净的解决方案,但是在没有包装器控制器(test-ctrl)的情况下编写代码是否可能 有没有更好的方法进行绑定 飞镖 导入“包:角度/角度.dart”; @NgController(选择器:“[my ctrl]”,发布为:“ctrl”) 类MyCtrlController

我有一个服务,我一直在尝试对控制器中的服务属性之一进行双向绑定。下面是三种不同方法的代码。第一个使用
$watch()
,第二个使用getter/setter,第三个使用带有
@NgTwoWay
-binding的属性

我认为第三个是最干净的解决方案,但是在没有包装器控制器(test-ctrl)的情况下编写代码是否可能

有没有更好的方法进行绑定

飞镖

导入“包:角度/角度.dart”;
@NgController(选择器:“[my ctrl]”,发布为:“ctrl”)
类MyCtrlController{
字符串strMsg;
var-serv;
MyCtrlController(MyService myS,Scope\u Scope){
_scope.$watch(()=>myS.message,(value)=>strMsg=value);
_范围.$watch(()=>strMsg,(value)=>myS.message=value);
}
}
@NgController(选择器:“[my-ctrl2]”,发布为:“ctrl”)
类MyCtrl2控制器{
字符串_strMsg2;
设置strMsg2(字符串s){
_strMsg2=s;
serv.message=s;
}
字符串获取strMsg2{
_strMsg2=serv.message;
返回_strMsg2;
}
var-serv;
MyCtrl2控制器(MyService myS){
serv=myS;
strMsg2=myS.message;
}
}
@NgController(选择器:“[my-ctrl3]”,发布为:“ctrl”)
类myctrl3控制器{
@NgTwoWay('message3')
字符串消息3;
}
@NgController(选择器:“[test ctrl]”,发布为:“testctrl”)
类TestCtrlController{
var-serv;
TestCtrlController(MyService myS){
serv=myS;
}
}
类MyService{
字符串消息='blue';
}
类MyAppModule扩展模块{
MyAppModule(){
类型(MyCtrlController);
类型(MyCtrl2控制器);
类型(MyCtrl3控制器);
类型(TestCtrlController);
类型(MyService);
}
}
void main(){
ngBootstrap(模块:newmyappmodule());
}
ang.html


ng模型试验
控制员1:

消息1是{{ctrl.strMsg}}

控制员2:

消息2是{ctrl.strMsg2}

控制员3:

Message3是{{ctrl.Message3}}


IMHO最好的方法是将第二个变体的版本进行精简:

@NgController(选择器:“[my-ctrl2]”,发布为:“ctrl”)
类MyCtrl2控制器{
var服务;
MyCtrl2控制器(MyService this.service){
}
设置strMsg2(字符串s){
service.message=s;
}
字符串获取strMsg2{
返回服务消息;
}
}

希望有帮助;-)

顺便说一下。。。如果与test ctrl publishAs一起使用:'ctrl'将不起作用,因为'ctrl'指向my-ctrl3控制器。这是虫子吗?我认为“ctrl”应该指向“>”结束符号后的“my-ctrl3”。谢谢,这是一种更简单的语法。我只是没看到。当然,使用fat arrow语法(=>),它会更加简洁。我很高兴它有帮助。如果你能接受这个答案,我将不胜感激;-)我会接受答案的。我在等待,如果有人会评论任何关于省略包装器控制器的内容。你知道有没有办法在没有控制器的情况下使用/引用MyService,比如从“ng应用程序”级别?是的,可以直接在HTML中使用
ctrl.service.message
。我的意思是:是否可以省略控制器,在my-ctrl3属性中使用类似
message3=“ng app.service.message”
(此处ng app是某种默认的顶级/根级引用,而不是自定义的控制器)