在 Angular JS 模块中传递并获取 DOM 元素值

Posted

技术标签:

【中文标题】在 Angular JS 模块中传递并获取 DOM 元素值【英文标题】:Pass and get a DOM element value in Angular JS Module 【发布时间】:2016-03-21 02:04:44 【问题描述】:

我是 Angular JS 的新手

我有一个html页面,它会加载一个这样的js文件

<script type="text/javascript" src="components/adf-widget-iframe/dist/adf-widget-iframe.min.js"></script>

该文件 (adf-widget-iframe.min.js) 内容如下所示

! function() 
    "use strict";
    angular.module("adf.widget.iframe", ["adf.provider"]).config(["dashboardProvider", function(e) 
        e.widget("iframe", 
            title: "iframe",
            description: "Embed an external page into the dashboard",
            templateUrl: "widgetsPath/iframe/src/view.html",
            controller: "iframeController",
            controllerAs: "iframe",
            edit: 
                templateUrl: "widgetsPath/iframe/src/edit.html"
            ,
            config: 
                height: "420px"
            
        )
    ]).controller("iframeController", ["$sce", "config", function(e, r) 
        r.url && (this.url = e.trustAsResourceUrl(r.url))
    ]), angular.module("adf.widget.iframe").run(["$templateCache", function(e) 
        e.put("widgetsPath/iframe/src/edit.html", "<form role=form><div class=form-group><label for=url>URL</label> 

<input type=url class=form-control id=url ng-model=config.url placeholder=http://www.example.com>
//Here i need to put url from html page like from a text box.

</div><div class=form-group><label for=url>Height</label> <input type=text class=form-control id=url ng-model=config.height></div></form>"), e.put("widgetsPath/iframe/src/view.html", '<div><div class="alert alert-info" ng-if=!config.url>Please insert a url in the widget configuration</div><iframe ng-if=iframe.url class=adf-iframe style="height: config.height" src=iframe.url></iframe></div>')
    ])
(window);

在上面的代码中,我必须从 html 页面中获取一个值,并且需要放入 url 的位置,如锥体所示(我已经注释掉了。)

谁能帮助我如何将文本框数据放在 URL 的位置?

这是我的 html 文件

<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="dashboard sample app">
    <meta name="author" content="Sebastian Sdorra">

    <title>Dashboard</title>

    <!-- build:css css/sample.min.css -->
    <!-- Bootstrap core CSS -->
    <link href="components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- dashboard style -->
    <link href="components/angular-dashboard-framework/dist/angular-dashboard-framework.min.css" rel="stylesheet">
    <link href="components/adf-widget-clock/dist/adf-widget-clock.min.css" rel="stylesheet">
    <link href="components/adf-widget-iframe/dist/adf-widget-iframe.min.css" rel="stylesheet">
    <style>
    body 
      padding-top: 60px;
    
    </style>
    <!-- endbuild -->

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->

    <!--[if lte IE 8]>
      <script>
        document.createElement('adf-dashboard');
        document.createElement('adf-widget');
        document.createElement('adf-widget-content');
      </script>
    <![endif]-->

  </head>

  <body ng-app="adfDynamicSample">

    <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
      <div class="container" ng-controller="navigationCtrl as nav">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" ng-click="nav.toggleNav()">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">ADF Dynamic Sample</a>
        </div>
        <div collapse="nav.navCollapsed" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li ng-class="nav.navClass('boards/' + item.id)" ng-repeat="item in nav.items | orderBy: title">
              <a ng-href="#/boards/item.id">item.title</a>
            </li>
            <li>
              <a style="cursor: pointer;" ng-click="nav.create()">Create</a>
            </li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </div>

    <div class="container">

      <ng-view />

    </div>

    <!-- components -->
    <script type="text/javascript" src="components/Sortable/Sortable.min.js"></script>
    <script type="text/javascript" src="components/angular/angular.min.js"></script>
    <script type="text/javascript" src="components/angular-route/angular-route.min.js"></script>
    <script type="text/javascript" src="components/angular-bootstrap/ui-bootstrap.min.js"></script>
    <script type="text/javascript" src="components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
    <script type="text/javascript" src="components/angular-dashboard-framework/dist/angular-dashboard-framework.min.js"></script>

    <!-- scripts -->
    <script type="text/javascript" src="scripts/app.js"></script>

    <!-- structures -->
    <script type="text/javascript" src="components/adf-structures-base/dist/adf-structures-base.min.js"></script>

    <!-- clock -->
    <script type="text/javascript" src="components/moment/min/moment.min.js"></script>
    <script type="text/javascript" src="components/adf-widget-clock/dist/adf-widget-clock.min.js"></script>

    <!-- github -->
    <script type="text/javascript" src="components/highcharts/adapters/standalone-framework.js"></script>
    <script type="text/javascript" src="components/highcharts/highcharts.js"></script>
    <script type="text/javascript" src="components/highcharts-ng/dist/highcharts-ng.js"></script>
    <script type="text/javascript" src="components/adf-widget-github/dist/adf-widget-github.min.js"></script>

    <!-- iframe -->
    <script type="text/javascript" src="components/adf-widget-iframe/dist/adf-widget-iframe.min.js"></script>

    <!-- linklist -->
    <script type="text/javascript" src="components/adf-widget-linklist/dist/adf-widget-linklist.min.js"></script>

    <!-- markdown -->
    <script type="text/javascript" src="components/showdown/compressed/Showdown.min.js"></script>
    <script type="text/javascript" src="components/angular-markdown-directive/markdown.js"></script>
    <script type="text/javascript" src="components/adf-widget-markdown/dist/adf-widget-markdown.min.js"></script>

    <!-- news -->
    <script type="text/javascript" src="components/adf-widget-news/dist/adf-widget-news.min.js"></script>

    <!-- randommsg -->
    <script type="text/javascript" src="components/adf-widget-randommsg/dist/adf-widget-randommsg.min.js"></script>

    <!-- version -->
    <script type="text/javascript" src="components/adf-widget-version/dist/adf-widget-version.min.js"></script>

    <!-- weather -->
    <script type="text/javascript" src="components/adf-widget-weather/dist/adf-widget-weather.min.js"></script>
  </body>
</html>

它是我参考的仪表板 GUI, 我正在使用此仪表板示例

https://github.com/angular-dashboard-framework/adf-dynamic-example

【问题讨论】:

【参考方案1】:

如果我正确理解了问题,我们会在添加新的iframe 时尝试传递当前页面的 URL。

如果以上是真的,这是我的解决方案:

$location注入控制器 获取当前页面的绝对路径:$location.$$absUrl$templateCache 中使用绝对路径值

您既可以使用 URL 字符串作为输入的占位符,也可以作为输入值。如果它用作输入值,iframe 会立即创建,因为按照原始设计它应该为 null

在 GUI 中,它看起来像这样:

adf-widget-iframe.js的内容:

(function(window, undefined) 'use strict';


angular.module('adf.widget.iframe', ['adf.provider'])
    .config(["dashboardProvider", function(dashboardProvider)
        dashboardProvider
            .widget('iframe', 
                title: 'iframe',
                description: 'Embed an external page into the dashboard',
                templateUrl: 'widgetsPath/iframe/src/view.html',
                controller: 'iframeController',
                controllerAs: 'iframe',
                edit: 
                    templateUrl: 'widgetsPath/iframe/src/edit.html'
                ,
                config: 
                    height: '420px'
                
            );
    ])
    .controller('iframeController', ["$sce", "config", "$location", function($sce, config, $location)
        config.placeholder = $location.$$absUrl;
        if (config.url)
            this.url = $sce.trustAsResourceUrl(config.url);
        
    ]);

angular.module("adf.widget.iframe").run(["$templateCache", function($templateCache) $templateCache.put("widgetsPath/iframe/src/edit.html","<form role=form><div class=form-group><label for=url>URL</label> <input type=url class=form-control id=url ng-model=config.url placeholder=config.placeholder></div><div class=form-group><label for=url>Height</label> <input type=text class=form-control id=url ng-model=config.height></div></form>");
$templateCache.put("widgetsPath/iframe/src/view.html","<div><div class=\"alert alert-info\" ng-if=!config.url>Please insert a url in the widget configuration</div><iframe ng-if=iframe.url class=adf-iframe style=\"height: config.height\" src=iframe.url></iframe></div>");]);)(window);

不要忘记将未缩小的文件实际导入 index.html

<!-- iframe -->
    <script type="text/javascript" src="components/adf-widget-iframe/dist/adf-widget-iframe.js"></script>

【讨论】:

以上是关于在 Angular JS 模块中传递并获取 DOM 元素值的主要内容,如果未能解决你的问题,请参考以下文章

转载Angular.js学习笔记

在node.js中的Webscraper,JS修改了DOM

如何在 Angular.js 中从 DOM 中添加/删除 createElement

怎么在ng-repeat生成的元素上操作dom

使用 Angular JS 抓取网站以获取基本数据(Facebook 之类的链接共享模块)

angular.module()创建获取注册angular中的模块