GVKun编程网logo

AngularJS动态生成div的ID源码解析(angular动态生成表单)

17

本文将带您了解关于AngularJS动态生成div的ID源码解析的新内容,同时我们还将为您解释angular动态生成表单的相关知识,另外,我们还将为您提供关于AngularJSdirective返回对

本文将带您了解关于AngularJS动态生成div的ID源码解析的新内容,同时我们还将为您解释angular动态生成表单的相关知识,另外,我们还将为您提供关于AngularJS directive返回对象属性详解_AngularJS、angularjs – angular js动态地将列添加到ui-grid、angularjs – Karma – 单元测试Angular JS指令时div的ui属性不正确、angularjs – OnClick单选按钮show hide div angular js的实用信息。

本文目录一览:

AngularJS动态生成div的ID源码解析(angular动态生成表单)

AngularJS动态生成div的ID源码解析(angular动态生成表单)

1、问题背景

给定一个数组对象,里面是div的id;循环生成div元素,并给id赋值

2、实现源码

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>AngularJS动态生成div的ID</title> 
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
<script> 
var app = angular.module("idApp",[]); 
app.controller("idCon",function($scope){ 
$scope.divIds = [ 
{divId:"chartId1"}, 
{divId:"chartId2"}, 
{divId:"chartId3"}, 
{divId:"chartId4"}, 
{divId:"chartId5"} 
]; 
}); 
</script> 
</head> 
<body ng-app="idApp" ng-controller="idCon"> 
<div ng-repeat="chart in divIds"> 
<div id="{{chart.divId}}">{{chart.divId}}</div> 
</div> 
</body> 
</html>

3、实现结果

<html>

<head>

<style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style> 
<meta charset="UTF-8"> 
<title>angularJS动态生成div的ID</title> 
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
<script> 
var app = angular.module("idApp",[]); 
app.controller("idCon",function($scope){ 
$scope.divIds = [ 
{divId:"chartId1"}, 
{divId:"chartId2"}, 
{divId:"chartId3"}, 
{divId:"chartId4"}, 
{divId:"chartId5"} 
]; 
}); 
</script> 
</head> 
<body ng-controller="idCon" ng-app="idApp"> 
<!-- ngRepeat: chart in divIds --><div ng-repeat="chart in divIds"> 
<div id="chartId1">chartId1</div> 
</div><!-- end ngRepeat: chart in divIds --><div ng-repeat="chart in divIds"> 
<div id="chartId2">chartId2</div> 
</div><!-- end ngRepeat: chart in divIds --><div ng-repeat="chart in divIds"> 
<div id="chartId3">chartId3</div> 
</div><!-- end ngRepeat: chart in divIds --><div ng-repeat="chart in divIds"> 
<div id="chartId4">chartId4</div> 
</div><!-- end ngRepeat: chart in divIds --><div ng-repeat="chart in divIds"> 
<div id="chartId5">chartId5</div> 
</div><!-- end ngRepeat: chart in divIds --> 
</body>
</html>

以上所述是小编给大家介绍的AngularJS动态生成div的ID源码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

您可能感兴趣的文章:
  • Angularjs 动态添加指令并绑定事件的方法
  • AngularJS实现动态编译添加到dom中的方法
  • AngularJs动态加载模块和依赖注入详解
  • angularJS与bootstrap结合实现动态加载弹出提示内容
  • AngularJS实现给动态生成的元素绑定事件的方法
  • AngularJS动态绑定HTML的方法分析
  • AngularJS实现根据变量改变动态加载模板的方法
  • AngularJs 动态加载模块和依赖
  • AngularJS使用ngOption实现下拉列表的实例代码
  • AngularJS使用ng-options指令实现下拉框
  • AngularJS实现动态添加Option的方法

AngularJS directive返回对象属性详解_AngularJS

AngularJS directive返回对象属性详解_AngularJS

 写在前面:由于directive部分是angularjs中的重中之重,所以会分多篇章进行讲解。本章主要讲解directive返回对象中比较简单的属性

angularjs中使用.directive()来定义指令,该方法接收两个参数:name(指令的名字)、factory_function(该函数定义指令的全部行为,返回一个对象)

栗子:

//index.js
angular.module(''myApp'',[]);
myApp.directive(''myDirective'',function() {return {};});
登录后复制

返回对象中包含以下属性及方法:

1:restrict:String

该属性用来说明myDirective指令在DOM中是以何种形式被声明的(即在html中该把它用在什么地方)
该属性可选值有:E(元素)、A(属性,默认值)、C(类名)、M(注释),可单独使用,也可组合使用
看到过一种说法:如果是想要自定义一个独立的指令功能,即该指令独立完成一系列操作,不用依附其他元素、属性等,就将该指令定义为元素;如果想要用该指令来扩展某已存在指令的功能,便将其定义为属性。不知道这么理解是否合理,但确实也是一个很好的可以借鉴的选择方法标准

2:priority:Number

该属性用来定义指令的优先级(默认为0,ngRepeat是所有内置指令中优先级最高的,为1000),优先级高的先执行。

3:terminal:Boolean

该属性与priority属性有一定联系,它用来判断是否停止运行当前元素上比本指令优先级低的指令,但相同优先级的依旧会执行
栗子:

//index.js
angular.module(''myApp'',[])
.directive(''myDirective'',function() {
  return {
    restrict: ''AE'',
    priority: 1,
    template: ''<div>hello world</div>''
  };
})
.directive(''myDirective1'',function() {
  return {
    restrict: ''AE'',
    priority: 3,
    terminal: true
  };
})

登录后复制
<!-- index.html -->
<div my-directive my-directive1></div>
登录后复制

如果没有定义myDirective1指令,结果浏览器会显示hello world,但添加了myDirective1指令之后,并将其优先级priority设置比myDirective大,且在myDirective1上设置属性terminal属性为true之后,便会停止myDirective指令的执行。

4:template:String/Function

该属性定义一个模板(即在html文件中使用到该指令的部分会替换该模板内容,所以该模板主要是html格式)
属性有两种形式:一段html文本、一个返回模板字符串的函数,并且该函数接收两个参数:tElement,tAttrs

5:templateUrl:String/Function

当模板内容比较多时,直接嵌套在template中会显得冗余,可以采取将模板代码单独存放在一个文件中,这时就会需要引入文件,templateUrl便可以做到
属性也有两种形式:一个代表外部html文件路径的字符串、一个返回外部html文件路径字符串的函数,该函数接收两个参数:tElement,tAttrs

6:replace:Boolean

该属性默认值为false,指明模板是会被当做子元素插入到调用该指令的元素内部,还是覆盖取代调用该指令的元素。
栗子:

//index.js
angular.module(''myApp'',[])
.directive(''myDirective'',function() {
  return {
    restrict: ''A'',
    template: ''<div>hello world</div>'',
    replace: true/false
  };  
}) 
登录后复制
 <!-- index.html -->
<my-directive></my-directive>
登录后复制

当repalce取false时,浏览器端源码呈现为

hello world

取true时,呈现为
hello world

7:transclude:Boolean

栗子:

<!-- index.html -->
<div my-directive>world</div>
登录后复制

像这个例子中,如果指令内部有内容,一般情况下template模板会直接覆盖替换掉该内容,但现在我想把它保留下来,这时transclude就派上用途了

//index.js
angular.module(''myApp'',[])
.dirctive(''myDirective'',function() {
  return {
    restrict: ''EA'', 
    transclude: true,
    template: ''<div>hello <span ng-transclude></span></div>''
  };
})
登录后复制

上面js代码会将html文件指令中包含的world内嵌到模板中span元素中,注意,span元素添加了ng-transclude内置指令属性(这点很重要)
总之,该属性的作用,是告诉angularjs编译器,将它从DOM元素中获取的内容放到它发现ng-transclude指令的地方.
以上就是本文的全部内容,希望对大家的学习有所帮助。

angularjs – angular js动态地将列添加到ui-grid

angularjs – angular js动态地将列添加到ui-grid

嗨,我正在开发角度js应用程序我正在使用角度ui-grid来显示绑定来自mvc控制器的数据.但是在我将数据绑定到ui-grid之后我想要将额外的列添加到网格上,每行都有按钮我不知道怎么做.任何帮助都会感激不尽..

code:这里columnDefs将被绑定到http服务方法,它将调用mvc controll动作并绑定response.I我想现在添加新列.每行都有按钮.是否有任何绑定数组到columnDefs的字段:

$scope.gridOptions = {
            enableColumnsResize: true,enableSorting: false,enableFiltering: false,autoResize: true,enableFocusedCellEdit: true,enableCellSelection: true,enableCellEditOnFocus: true,enableColumnMenus: false,columnDefs: [

            ],data:$scope.swap,onRegisterapi: function (gridApi) {
                $scope.grid1Api = gridApi;
            }

        };
$http.get('/Default1/GetJsonData')
            .success(function (result) {
                $scope.swap = result;
                $scope.gridOptions.push({name:'newcol',filter:'newcolarray'})

                $scope.gridOptions.data = $scope.swap;
                console.log(result);
            })
            .error(function (data) {
                console.log(data);
            });

解决方法

您应该能够在success()处理程序中执行以下操作

$scope.gridOptions.columnDefs.push({name: 'newCol',displayName: 'My new col'});

依此类推,在设置$scope.gridOptions.data之前,每列调用一次

angularjs – Karma – 单元测试Angular JS指令时div的ui属性不正确

angularjs – Karma – 单元测试Angular JS指令时div的ui属性不正确

我正在为一个指令编写测试,该指令基本上扩展了它的容器以达到浏览器窗口的整个宽度.

为了举例说明,我将编写一些示例代码.

页面中的HTML:

<div>
  <full-width></full-width>
</div>

然后该指令将fullWidth指令替换为:

<div>
  <div ng-transclude=""></div>
</div>

并为元素指定边距,如下所示:

var sideOffset = element[0].offsetLeft*-1;

element.css('margin-left',sideOffset+'px')
element.css('margin-right',sideOffset+'px')

现在,该指令完全正常,但当我尝试使用以下方法测试偏移:

describe('Directive: fullWidth',function () {

  beforeEach(module('myApp'))

  var element,scope

  beforeEach(inject(function ($rootScope) {
    scope = $rootScope.$new()
  }))

  it('should have the same right and left margin',inject(function ($compile) {
    element = angular.element('<tt-full-width-section></tt-full-width-section>');
    element = $compile(element)(scope)

    var leftMargin = element.css('margin-left')
    console.log(leftMargin)
    console.log(element)
  }))
})

我得到一个不错的0px.还检查记录的元素[0] .offsetLeft得到0.

我怎么能(如果可能的话)告诉Karma(Jasmine?)渲染div以便我可以检查偏移?

基于daveoncode建议,我对测试进行了一些更改,我们正在改进.
但是,该指令似乎在测试中不起作用.
我仍然得到0px作为margin-left而265px的offsetLeft

it('should have the same right and left margin',inject(function ($compile) {
  element = angular.element(
      '  <div>' +
      '    <full-width></full-width>' +
      '  </div>'
  );
  element = $compile(element)(scope)
  angular.element(document).find('body').append(element);

  var el2 = element.find('div')

  var leftMargin = el2.css('margin-left')
  var rightMargin = el2.css('margin-right')
  console.log(leftMargin,el2)
}

解决方法

提示1:

CSS样式在添加到DOM之前不会应用于元素!这不是与业力,角度,茉莉或其他相关的问题……这就是浏览器引擎的工作原理!浏览器解析CSS定义并根据它呈现页面中的元素,但在角度测试中,您编写:

var element = angular.element('<my-directive></my-directive>');
$compile(element)(scope);

您正在处理内存中的DOM节点,除了您的JavaScript代码之外,它们都是未知的!浏览器引擎应该如何将CSS应用于生活在js变量中的内存节点?它显然不能……它只能遍历页面中的节点树,所以……“修复”非常简单:你必须将元素添加到DOM:

angular.element(document).find('body').append(element);

提示2:

好吧,我认为现在你的问题实际上是另一个,你正在使用jQlite .css()实现,这与jQuery不同,它不会检索计算的样式而只是内联的(因此我担心不能“将“自动转换为实际的像素数!”…尝试使用此片段检索剩余的计算边距:

window.getComputedStyle(element,null).marginLeft

(getComputedStyle应该适用于IE以外的每个浏览器,所以如果你使用PhantomJS进行测试就可以了)

angularjs – OnClick单选按钮show hide div angular js

angularjs – OnClick单选按钮show hide div angular js

我的代码是,
<form name="myForm" ng-controller="Ctrl">
      <input type="radio" ng-model="color" value="red">  Red <br/>
      <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/>
      <input type="radio" ng-model="color" value="blue"> Blue <br/>
  </form>

  <div id="reddiv">Red Selected</div>
  <div id="greendiv">Green Selected</div>
  <div id="bluediv">Blue Selected</div>

我的剧本是

function Ctrl($scope) {
    $scope.color = 'blue';
    if ($scope.color == 'blue') {
        //blue div show
    }
    else if($scope.color == 'green') {
        //green div show
    } 
    else {
        //red div show
    }
}

我需要根据单选按钮点击显示,我尝试了上面给出的一段代码,任何想法

Angular方式是使用ngShow / ngHide / ngIf指令来显示相应的div.考虑这个例子:
app.controller('Ctrl',function($scope) {
    $scope.color = 'blue';
    $scope.isShown = function(color) {
        return color === $scope.color;
    };
});

HTML:

<div ng-show="isShown('red')">Red Selected</div>
<div ng-show="isShown('green')">Green Selected</div>
<div ng-show="isShown('blue')">Blue Selected</div>

演示:http://plnkr.co/edit/yU6Oj36u9xSJdLwKJLTZ?p=preview

同样非常重要的是ng-controller =“Ctrl”应该移动到你的表格之上,因为潜水应该在同一范围内.

今天关于AngularJS动态生成div的ID源码解析angular动态生成表单的讲解已经结束,谢谢您的阅读,如果想了解更多关于AngularJS directive返回对象属性详解_AngularJS、angularjs – angular js动态地将列添加到ui-grid、angularjs – Karma – 单元测试Angular JS指令时div的ui属性不正确、angularjs – OnClick单选按钮show hide div angular js的相关知识,请在本站搜索。

本文标签: