对AngularJs基于组件的模式适应TypeScript感到困惑

对AngularJs基于组件的模式适应TypeScript感到困惑,angularjs,typescript,angular-ui-bootstrap,Angularjs,Typescript,Angular Ui Bootstrap,当您在Javascript中创建AngularJS组件,并使用ui引导显示为模式时,您将传递一个绑定,该绑定可用于模式实例解除或关闭自身,如下所示: app.component("fringeEdit", { controller: "FringeEditController", templateUrl: "/template/fringeEditTemplate.html", bindings: { close: '&', <

当您在Javascript中创建AngularJS组件,并使用ui引导显示为模式时,您将传递一个绑定,该绑定可用于模式实例解除或关闭自身,如下所示:

app.component("fringeEdit",   {
    controller: "FringeEditController", 
    templateUrl: "/template/fringeEditTemplate.html", 
    bindings: {
        close: '&',    <---
        dismiss: '&' . <--- 
      }
}); 
$ctrl.openComponentModal = function () {
    var modalInstance = $uibModal.open({
      animation: $ctrl.animationsEnabled,
      component: 'fringeEdit'
      }
    });
注册模态控制器后,父控制器可以如下方式打开模态控制器:

app.component("fringeEdit",   {
    controller: "FringeEditController", 
    templateUrl: "/template/fringeEditTemplate.html", 
    bindings: {
        close: '&',    <---
        dismiss: '&' . <--- 
      }
}); 
$ctrl.openComponentModal = function () {
    var modalInstance = $uibModal.open({
      animation: $ctrl.animationsEnabled,
      component: 'fringeEdit'
      }
    });
这在Javascript中是有意义的——但在TypeScript中,我一直遇到这样的问题:在哪里可以找到这些绑定

它们似乎不像javascript示例中那样神奇地将自己插入到控制器函数中,突然出现了一个可用的
$ctrl.close(…)
函数。在这里,我为我的控制器使用了一个类,我定义了close和disclose函数,尽管我没有实现它们(希望它们会像在JS中那样神奇地落入实例化的控制器中),但这永远不会发生(一旦我显示模式并触发
dismissMe
函数,我就得到控制台。日志消息
dismise()未定义

我想也许我可以通过某种方式“找到它们”,并将“discover”和“close”分配给函数变量,但我不知道在哪里可以找到这些函数绑定的引用。这有点神秘,有人能给我一些指导吗

class FringeEditController   {
  dismiss: ((params: object) => any ) | undefined;
  close: ((params: object) => any ) | undefined;

  dismissMe() : void { 
    if (this.dismiss===undefined) {
      console.log("dismiss() is undefined!")
    } else { 
      this.dismiss({$value: "dismissed"};
    }
  }
  ...implementation
 }

Binary Horizon博客中给出的示例看起来很有希望(虽然有点痛苦),但他的代码实际上也没有显示如何将函数绑定到组件中。

好的,这实际上是由于组件模板的问题,而不是Typescript代码。在模板本身中,我有
ng控制器=“fringeEditController”
(是,哑)这导致第二个控制器被实例化,然后绑定到模式本身。第二个控制器实例没有在
$uibModal.open
函数中指定的绑定

通过从模板中删除
ng controller
指令,由
$uibModal.open
函数创建的控制器被正确绑定到模态,而关闭函数被正确绑定

在此过程中我学到了一些有趣的东西:绑定在控制器的构造函数中仍然没有定义。它们在初始化和$onInit之间的某个时间被绑定