本文将带您了解关于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 directive返回对象属性详解_AngularJS
- angularjs – angular js动态地将列添加到ui-grid
- angularjs – Karma – 单元测试Angular JS指令时div的ui属性不正确
- angularjs – OnClick单选按钮show hide div angular js
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
写在前面:由于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时,浏览器端源码呈现为
取true时,呈现为
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
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); });
解决方法
$scope.gridOptions.columnDefs.push({name: 'newCol',displayName: 'My new col'});
依此类推,在设置$scope.gridOptions.data之前,每列调用一次
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) }
解决方法
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
<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 } }
我需要根据单选按钮点击显示,我尝试了上面给出的一段代码,任何想法
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的相关知识,请在本站搜索。
本文标签: