如何从angular.dart组件中调用jquery插件?

时间:2013-12-14 18:47:50

标签: jquery dart angular-dart shadow-dom dart-js-interop

我正在学习angular.dart组件,尝试创建一个可以访问现有jquery插件的组件。我正在尝试以下内容:

library mylib;

import 'dart:html'; // querySelector
import 'package:js/js.dart'; // javascript 
import 'package:angular/angular.dart';

@NgComponent(
    selector: 'aSelector',
    templateUrl: 'partial.html',
    cssUrl: 'style.css',
    publishAs: 'ctrl',
    map: const {
      'param': '=>param'
    }
)
class myComponent extends NgShadowRootAware {
  String param;
  Compiler compiler;
  Injector injector;
  Scope scope;

  MyComponent(this.compiler, this.injector, this.scope);

  void onShadowRoot(ShadowRoot shadowRoot) {
    this.scope.$watch((int) => shadowRoot.querySelector('.myContainer').text.length, (currentValue, previousValue, Scope scope) {
      if (currentValue != previousValue) {
        var container = context.jQuery('.myContainer', shadowRoot);
        var options = map({
          'p1': 1,
          'p2': 2
        });
        container.jqplugin(options);
      }
    });
  }
}

不幸的是,'容器'似乎是空的...如何让jQuery选择一个组件内部的元素,即阴影dom?

顺便说一句,目前推荐的导入js的方式是什么?我发现了这个:

import 'package:js/js.dart' as js;

但是现在包js的某些部分功能被移动到dart:js中,我不确定应该做什么。

1 个答案:

答案 0 :(得分:2)

问题似乎是 jQuery 问题。也许它适用于:

var container = context.jQuery(shadowRoot.querySelector('.myContainer'));

关于 dart:js 包:js (参见How do you interact with js from dart?):

  

包:js 提供了一个更简单的Api,其代价是增加了js的大小(因为包:js 使用 dart:mirrors noSuchMethod )。

关于 js 命名空间,您可以按照自己的意愿行事。我个人更喜欢使用前缀来更好地了解何时完成与Js的交互。但这是一个品味问题。