Присвоение ключа и значения области видимости в конструкторе компонента Angular Dart

Рассмотрим этот предельно простой компонент Angular Dart:

import 'package:angular/angular.dart';

@NgComponent(
    selector: 'el',
    templateUrl: './component.html',
    publishAs: 'ctrl',
    map: const {
      'foo': '@foo'
    }
)
class MyElement {
  String foo;

  MyElement(Scope scope) {
    scope['bar'] = 'bar';
  }
}

Поле foo передается как атрибут, а поле bar добавляется к scope в конструкторе.

Это позволяет использовать в представлении следующее:

<div>{{ctrl.foo}}</div>
<div>{{bar}}</div>

foo должно предшествовать ctrl, а bar — нет. Непосредственное добавление поля в область действия в этом конкретном примере кажется плохим шаблоном, но есть ли общий вариант использования для доступа к объекту scope в конструкторе компонента и определения в нем значений?


person Shailen Tuli    schedule 12.01.2014    source источник
comment
Хороший вопрос. До сих пор у меня сложилось впечатление, что это в основном наследство от JS, поскольку, насколько мне известно, не было членов класса (например, вашего foo). Может быть интересно получить доступ к свойствам, которые не являются членами самого компонента. Я не проверял, работает ли <div>{{$parent.xxx}}</div>.   -  person Günter Zöchbauer    schedule 13.01.2014


Ответы (1)


Короткий ответ - нет'. На самом деле компонентам не нужно напрямую обращаться к объекту Scope.

Это улучшение синтаксиса в AngularJS (1.0, 1.2). В AngularDart установка явных $watchs из компонентов, а также установка свойств области в основном устарели.

  • Вместо установки свойств области AngularDart использует аннотацию publishAs для установки свойств области (с префиксом ctrl).
  • Вместо часов компоненты определяют сопоставления между атрибутами элемента и членами класса.

Доступ к Scope по-прежнему полезен при написании директив. например ng-repeat будет использовать объект Scope для создания дочерних областей и установки свойства $index.

person James deBoer    schedule 13.01.2014