Angular-Material 、 AngularJS 、 TypeScript 、 Javascript 、 ng-controller 在我的 md-dialog 中无法访问

Posted

技术标签:

【中文标题】Angular-Material 、 AngularJS 、 TypeScript 、 Javascript 、 ng-controller 在我的 md-dialog 中无法访问【英文标题】:Angular-Material , AngularJS , TypeScript , Javascript , ng-controller not accessible within my md-dialog 【发布时间】:2016-07-08 04:39:05 【问题描述】:

我的代码有问题,我正在尝试使用 ng-controller 调用我的用户(在索引上声明,如 'ng-controller="mainController as vm"'),我可以在我的代码来访问用户并获取他的电子邮件和图像。 但是现在我希望能够在单击我的图像时打开一个 md 对话框,因此可以在对话框中放大图像,我的对话框打开但我无法访问我的控制器(vm)来说出他必须显示的图像。

这会在我的内容页面中打开图片:

<img src="vm.selected.item4" />

顺便说一句,效果很好

这就是我打开对话框的方式:

<md-button ng-click="vm.showDialog($event)" >
            <img src="vm.selected.item1"/>
</md-button>

我的对话框打开,但它不会显示图像... 有没有人知道如何解决这个问题?

(如果我的主题或问题没有正确形成,我很抱歉,我是新手,如果有什么不正确的地方,请纠正我......)

【问题讨论】:

你能显示整个代码吗?如果可能的话,一支笔会很棒 我会尽量把项目做得更小,这样我就可以做一支笔了,现在它有很多文件了:D 该死的,很难用它来做笔...因为它是材料设计,仅此一项就需要调用多个文件(css 等),而且我有多个 .js 和 .ts 文件在我的项目中...我今天将尝试将网站上线,以便您可以使用开发工具对其进行检查 只是硬编码值并做一个小例子。 或者只是你在 $mdDialog.show 或 vm.showDialog($event) 中使用的代码 【参考方案1】:

有几种方法可以将值从父范围传递到对话框。以下是 3 个示例用法。您可以使用this codepen与他们一起玩。

.controller('AppCtrl', function ($scope, $mdDialog) 

  $scope.imageUrl = "https://upload.wikimedia.org/wikipedia/commons/1/18/Bradypus.jpg";

    // Show the image in the dialog by using parent scope directly in the template.
  $scope.showDialog = function(ev) 
    $mdDialog.show(
      template: '<img src="' + $scope.imageUrl + '"></img>',
      parent: angular.element(document.querySelector('#popupContainer')),
      targetEvent: ev,
      clickOutsideToClose: true,
      ariaLabel: 'Dialog 1',
    );
  

  // Get the image from the function call and use directly in the template
  $scope.showDialog2 = function(ev, image) 
    $mdDialog.show(
      template: '<img ng-src="' + image + '"></img>',
      parent: angular.element(document.querySelector('#popupContainer')),
      targetEvent: ev,
      clickOutsideToClose: true,
      ariaLabel: 'Dialog 2'
    );
  

  // Show the image by defining locals. This is the most elegant way, 
  // IMO. You can make any value available by defining locals. After 
  // defining locals, you can use the defined locals in your dialog 
  // controller. After you get the locals from your controller, you can 
  // easily use them in your dialog's template.
  $scope.showDialog3 = function(ev) 
    $mdDialog.show(
      template: '<img ng-src="image"></img>',
      parent: angular.element(document.querySelector('#popupContainer')),
      targetEvent: ev,
      clickOutsideToClose: true,
      ariaLabel: 'Dialog 3',
      locals: image: $scope.imageUrl,
      controller: function($scope, $log, image) 
        $scope.image = image;
      
    );
  

);

html

<div ng-app="MyApp">
  <div ng-controller="AppCtrl">
    <md-content id="popupContainer" style="height: 500px;">

      <md-button class="md-raised md-primary" ng-click="showDialog($event)">
        Open Dialog
      </md-button>
      <md-button class="md-raised md-primary" ng-click="showDialog2($event, imageUrl)">
        Open Dialog 2
      </md-button>
      <md-button class="md-raised md-primary" ng-click="showDialog3($event)">
        Open Dialog 3
      </md-button>

    </md-content>
  </div>
</div>

你也可以查看the docs的例子。

【讨论】:

Thnx Turgut 这对我帮助很大 Turgut,你熟悉 TypeScript 吗?为什么它不能用它?它使用“普通的javascript”工作 对不起托尼。我不熟悉 TypeScript。

以上是关于Angular-Material 、 AngularJS 、 TypeScript 、 Javascript 、 ng-controller 在我的 md-dialog 中无法访问的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular-Material 获得全高侧导航

如何从 angular-material2 对话框与其父级进行通信

未捕获的错误:模块“MyMaterialModule”导入的意外指令“angular-material”。请添加 @NgModule 注释。角 5

Angular-material ng-click 奇怪的边框高亮

包装或扩展 angular-material 组件,允许将未知属性传递给子组件

Angular-Material 、 AngularJS 、 TypeScript 、 Javascript 、 ng-controller 在我的 md-dialog 中无法访问