【问题标题】:How to get HTML element in $mdDialog in Angularjs如何在 Angularjs 的 $mdDialog 中获取 HTML 元素
【发布时间】:2017-04-29 10:20:51
【问题描述】:

我在我的 Angular 应用程序中实现了一个 $mdDialog,当我单击一个按钮时,它由以下代码显示:

            // Show the dialog
        $mdDialog.show({
            clickOutsideToClose: true,
            controller: function($mdDialog) {
                this.item = item;
                this.close = function() {
                    $mdDialog.cancel();
                };
        var video = document.getElementById('video');

            },
            controllerAs: 'dialog',
            templateUrl: 'templateurl',
            targetEvent: $event
        });

在我的 templateurl 中是一个带有以下元素的 HTML 文档

<video id="video"></video>

我正在尝试通过控制器中的“document.getElementById”访问视频元素(参见代码)。由于在呈现 html 之前加载了控制器,因此我返回了一个空对象...

有人已经做到了吗?

【问题讨论】:

标签: javascript html angularjs


【解决方案1】:

创建一个指令以将元素放在作用域上:

app.directive("onElemLink", function() {
    return postLink;
    function postLink(scope, elem, attrs) {
        scope.$eval(attrs.onElemLink, {$elem: elem});
    }
});

用法:

<video on-elem-link="videoElem=$elem"></video>

在控制器中:

$scope.videoElem.on("load", function(event) {
    console.log(videoElem[0].videoHeight);
    console.log(videoElem[0].videoWidth);
});

AngularJS 框架在框架将元素添加到 DOM 后调用指令的 postLink 函数。这是实现依赖于元素存在的代码的最佳位置。


我在 $scope.videoElem.on(..) 的控制器中收到错误“无法读取未定义的属性 'on'”。我认为这是因为无论指令是否已加载,代码都会执行?

使用指令的另一种方法是提供一个函数:

<video on-elem-link="videoOnLink($elem)"></video>

在控制器中:

$scope.videoOnLink(elem) {
    console.log("video element linked");
    $scope.videoElem = elem;
    $scope.videoElem.on("load", function(event) {
        console.log(videoElem[0].videoHeight);
        console.log(videoElem[0].videoWidth);
    });
});

$compile service 将指令链接到 DOM 后调用 videoOnLink 函数。

【讨论】:

  • 你的回答很有道理,到目前为止谢谢。不过,我在 $scope.videoElem.on(..) 的控制器中收到错误“无法读取未定义的属性‘on’”。我认为这是因为无论指令是否已加载,代码都会执行?
  • 函数没有被调用...我不知道我做错了什么。
  • 现在可以使用了。但我已经用一种解决方法做到了。我设置了一个按钮,可以点击视频元素。有了这个,我可以确保视频元素已经在 DOM 中并且不为空。
猜你喜欢
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 2020-06-09
  • 2023-03-18
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多