2014-02-14 58 views
1

我是AngularDart(和Dart)的完整初学者;我跟着教程,但这是我似乎无法找到答案。如何在子属性更改时触发NgComponent的更新

我有一个很好地工作2个NgComponents:

<colorImage car-color="ctrl.car.color"></colorImage> 
<carImage car="ctrl.car"></carImage> 

我控制器“CTRL”有一个名为“汽车”和“汽车”酒店有一个名为“色”属性。 当“car.color”更改时,colorButton NgComponent更新,但carImage NgComponent不更新。

当“car.color”更改时,如何触发carImage的更新?

谢谢!

回答

1

您必须在CarImage中设置手表为car.color。 这看起来取决于您用于汽车的数据结构。

// constructor 
CarImage(Scope scope) { 
    scope.$watch(() => car.color, (color) => doSomething(color)); 
} 
+0

谢谢,这是我所期待的。 它似乎比直接绑定慢一点,但仍然正常工作! – user3309092

1

下面是工作示例没有scopewatch特征。我相信这是一个有角度的解决方案。

一下关于这个问题:https://stackoverflow.com/a/21958268/2777805

ang_testi.dart

import 'package:angular/angular.dart'; 

@NgComponent(
selector: 'colorImage', 
template: r'<p>colorImage: <input type="text" ng-model="cmp.carColor"></p>', 
publishAs: 'cmp' 
) 
class colorImage { 
    @NgTwoWay('car-color') 
    String carColor; 
} 

@NgComponent(
    selector: 'carImage', 
    template: r'<p>carImage: <input type="text" ng-model="cmp.car.color"></p>', 
    publishAs: 'cmp' 
) 
class carImage { 
    @NgTwoWay('car') 
    Map car; 
} 

@NgController(
    selector: '[main-test]', 
    publishAs: 'ctrl') 
class MainTestController { 
    Map car = {"color":"green", "image":"someImage"}; 
} 

class MyAppModule extends Module { 
    MyAppModule() { 
    type(MainTestController); 
    type(colorImage); 
    type(carImage); 
    } 
} 

void main() { 
    ngBootstrap(module: new MyAppModule()); 
} 

ang_testi.html

<!DOCTYPE html> 

<html ng-app> 
    <head> 
    <meta charset="utf-8"> 
    <title>ng-model test</title> 
    <link rel="stylesheet" href="ang_testi.css"> 
    </head> 
    <body main-test> 
    <colorImage car-color="ctrl.car.color"></colorImage> 
    <carImage car="ctrl.car"></carImage> 

    <p>controller: <input type="text" ng-model="ctrl.car.color"></p> 
    <p>color is {{ctrl.car.color}}</p> 

    <script src="packages/shadow_dom/shadow_dom.min.js"></script> 
    <script type="application/dart" src="ang_testi.dart"></script> 
    <script src="packages/browser/dart.js"></script> 
    </body> 
</html> 
+0

在控制器中,不需要类型“Map”,“String color”;足够。调用carImage组件(例如)时,可以将整个控制器用作参考(这很有趣)。组件内部的变量需要定义为“var car;”为了获得正确的类型。 – grohjy

相关问题