首页 > 编程知识 正文

代码适用于jsfiddle(关于代码的知识)

时间:2023-12-02 00:20:22 阅读:311218 作者:VYNE

本文目录一览:

  • 1、php中可以用angularjs的指令吗?
  • 2、html中一个标签的末尾含有很多空格,在浏览器中首行没有到达边界就换行了
  • 3、html 当文本框未输入时点按钮,旁边出现红色警告字怎么写求代码
  • 4、jsfiddle怎么演示ajax 使用技巧
  • 5、前端常用的几种在线代码编辑器各有什么优势

php中可以用angularjs的指令吗?

摘要:使用过AngularJS的朋友应该最感兴趣的是它的指令。现今市场上的前端框架也只有AngularJS拥有自定义指令的功能,并且AngularJS是目前唯一提供Web应用可复用能力的框架。目前有很多JavaScript产品提供插... SyntaxHighlighter.all();...

使用过 AngularJS 的朋友应该最感兴趣的是它的指令。现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架。

目前有很多JavaScript 产品提供插件给Web开发人员。例如, Bootstrap 就是当前比较流行的提供样式和JavaScript插件的前端开发工具包。但是开发人员在使用Booostrap中的插件时, 必须切换到JavaScript 模式来写 jQuery 代码来激活插件虽然jQuery 代码写起来十分简单,但是必须和HTML进行同步,这是一个单调乏味且容易出错的过程。

AngularJS主页展示了一个简单的例子,用于实现Bootstrap中的 Tab功能,可以在页面中轻松添加 Tab 功能,并且使用方法和 ul 标签一样简单。HTML代码如下:

复制代码

body ng-app="components"

h3BootStrap Tab Component/h3

tabs

pane title="First Tab"

divThis is the content of the first tab./div

/pane

pane title="Second Tab"

divThis is the content of the second tab./div

/pane

/tabs

/body

复制代码

JavaScript代码如下:

复制代码

angular.module('components', []).

directive('tabs', function() {

return {

restrict: 'E',

transclude: true,

scope: {},

controller: [ "$scope", function($scope) {

var panes = $scope.panes = [];

$scope.select = function(pane) {

angular.forEach(panes, function(pane) {

pane.selected = false;

});

pane.selected = true;

}

this.addPane = function(pane) {

if (panes.length == 0) $scope.select(pane);

panes.push(pane);

}

}],

template:

'div class="tabbable"' +

'ul class="nav nav-tabs"' +

'li ng-repeat="pane in panes" ng-class="{active:pane.selected}"'+

'a href=""

'/li' +

'/ul' +

'div class="tab-content" ng-transclude/div' +

'/div',

replace: true

};

}).

directive('pane', function() {

return {

require: '^tabs',

restrict: 'E',

transclude: true,

scope: { title: '@' },

link: function(scope, element, attrs, tabsCtrl) {

tabsCtrl.addPane(scope);

},

template:

'div class="tab-pane" ng-class="{active: selected}" ng-transclude' +

'/div',

replace: true

};

})

复制代码

你可以从以下链接查看效果:

image

正如你所见,除了拥有用于实现指令的 tabs 和pane 标签,页面和常规HTML页面没有什么区别。HTML开发人员无需编写任何代码。当然,总需要有第一个吃螃蟹的人,创建指令共享使用,但是目前Tabs指令已经很常见了,可以在任何地方复用(如BootStrap,、jQueryUI、Wijmo, 和一些知名的前端插件集)。

由于指令的易用和易编写,许多用户已经开始使用AngularJS编写指令了。例如, AngularJS 开发组已经基于AngularJS实现了一系列指令-UI Bootstrap 来代替Bootstrap; 知名ComponentOne 控件厂商也在AngularJS 基础上创建了Wijmo ;我们也可以在GitHub上找到一些公共指令资料库:jQueryUI widgets。

拥有了 AngularJS,是不是觉得自己已经站在了巨人的肩膀上了?但是不要高兴的太早,如果已经有了这么多的指令供我们使用,那我们为什么还要学习AngularJS ,为什么还要学习自定义指令呢?

举个简单的例子,也许你有特殊的需求:假设你在一家财务公司工作,你需要创建一张财务表单,它需要以表格的形式展示数据、拥有绑定、编辑、校验并且同步数据更新到服务器的功能。表单插件很常见但是能够满足这些具体需求的不得而知了,所以你必须根据实际业务需求来创建自定义指令。

复制代码

body ng-app="abcFinance"

h3Offshore Investment Summary/h3

abc-investment-form

customer="currentCustomer"

country="currentCountry"

/abc-investment-form data

/body

复制代码

这就是本篇文章的目的,接下来我们会讨论如何创建 AngularJS指令。

创建自定义AngularJS 指令

文章开头的自定义指令十分的简单。它仅仅实现了同步的功能。一般指令是包含更多元素的:

复制代码

//创建指令模块 (或者检索现有模块)

var m = angular.module("myApp");

// 创建"my-dir"指令

myApp.directive("myDir", function() {

return {

restrict: "E", // 指令是一个元素 (并非属性)

scope: { // 设置指令对于的scope

name: "@", // name 值传递 (字符串,单向绑定)

amount: "=", // amount 引用传递(双向绑定)

save: "" // 保存操作

},

template: // 替换HTML (使用scope中的变量)

"div" +

" {{name}}: input ng-model='amount' /" +

" button ng-click='save()'Save/button" +

"/div",

replace: true, // 使用模板替换原始标记

transclude: false, // 不复制原始HTML内容

controller: [ "$scope", function ($scope) { … }],

link: function (scope, element, attrs, controller) {…}

}

});

复制代码

效果如下:

image

注意这个自定义指令遵循一种格式:以"my" 为前缀,类似于命名空间,因此如果你在应用中引用了多个模块指令,你可以通过前缀很容易的判断出它是在哪定义的。这不是硬性要求,但是这样做可以带来很多便利。

指令的构造函数会返回带有属性的JavaScript 对象。这些内容在AngularJS 主页中都有清晰说明。以下是我对一些属性的理解:

restrict: 说明指令在HTML中的应用形式,备选项有"A"、"E" 和 "C", "M" ,分别代表 attribute、element、class和comment(默认值为"A")。我们将更多的关注attributes-如何创建UI元素。

scope: 创建指令的作用范围,scope在指令中作为属性标签传递。Scope 是创建可以复用指令的必要条件,每个指令(不论是处于嵌套指令的哪一级)都有其唯一的作用域,它不依赖于父scope。scope 对象定义names 和types 变量。上面的例子即创建了3个scope变量。

name: "@" (值传递,单向绑定):

"@"符号表示变量是值传递。指令会检索从父级scope中传递而来字符串中的值。指令可以使用该值但无法修改,是最常用的变量。

amount: "=" (引用,双向绑定)

"="符号表示变量是引用传递。指令检索主Scope中的引用取值。值可以是任意类型的,包括复合对象和数组。指令可以更改父级Scope中的值,所以当指令需要修改父级Scope中的值时我们就需要使用这种类型。

save: "" (表达式)

“”符号表示变量是在父级Scope中启作用的表达式。它允许指令实现比修改值更高级的操作。

template: 替代原始模板中的标记的字符串。替换功能将替换所有旧元素为新值。注意template是如何使用Scope中定义的变量的。这允许你无需写任何额外的代码即可创建macro-style 风格指令。replace: 说明是否替换原始标记中的值或是追加原始标记中的值。默认值是false,这时原始标记将被保留。

transclude: 说明自定义指令是否复制原始标记中的内容。例如,之前展示的“tab”指令设置了transclude 为 true,因为tab 元素包含其他HTML 元素。 "dateInput" 指令则需要在初始化时为空,所以需要设置transclude 为false。

link: 该方法在指令中扮演着重要的角色。它负责执行DOM 操作和注册事件监听器等。link 方法包含以下参数:

scope: 指令Scope的引用。scope 变量在初始化时是不被定义的,link 方法会注册监视器监视值变化事件。

element: 包含指令的DOM元素的引用, link 方法一般通过jQuery 操作实例(如果没有加载jQuery,还可以使用Angular's jqLite )。

controller: 在有嵌套指令的情况下使用。这个参数作用在于把子指令的引用提供给父指令,允许指令之间进行交互, tab 指令就是使用该参数较典型的例子:

注意,当调用link 方法时, 通过值传递("@")的scope 变量将不会被初始化,它们将会在指令的生命周期中另一个时间点进行初始化,如果你需要监听这个事件,可以使用scope.$watch 方法。

html中一个标签的末尾含有很多空格,在浏览器中首行没有到达边界就换行了

你body上有600px的宽啊,还有你写这个 为了展位,你还不如写宽度呢,你设置一个高度,他不就有3行空白了

你的意思是这个不

html 当文本框未输入时点按钮,旁边出现红色警告字怎么写求代码

html

head

meta http-equiv=content-type content="text/html;charset=GBK"

/head

body

form action="" method="post" onsubmit="return check(this)"

label id="msg" style="color:red;font-size:12pt;"/label

br/

用户名:input name="username"/

br/

密 码:input type="password" name="username"/

br/

input type="submit" value="提交"/

/form

/body

script

function check(form){

return (function(node){

// 如果已经没有需要校验的子节点,则推出递归

if(!node) return true;

// 判断子节点类型,这里我们只需要校验text和password类型文本

if(/((text)|(password))/i.test(node.type)){

var isEmpty = node.value.length == 0;

// 校验文本是否为空

if(isEmpty){

caution(node); return false;

}

}

// 使用递归来遍历下一个节点

return arguments.callee(node.nextSibling);

})(form.firstChild);

}

function caution(node){

document.getElementById("msg").innerHTML = "请填写账号";

node.focus();

}

/script

/html

jsfiddle怎么演示ajax 使用技巧

首先要在页面引入相关的js库,然后在textarea 里面放入要执行的代码,然后eval(document.getElementById('interactiveEmitCode').value)代码如下:

textarea id="interactiveEmitCode" rows="20" cols="100"

var ps = new ParticleSystem();

ps.effectors.push(new ChamberBox(0, 0, 400, 400));

var dt = 0.01;

else

newMousePosition = new Vector2(e.offsetX, e.offsetY);

};

/textarea

br /

button onclick="eval(document.getElementById('interactiveEmitCode').value)" type="button"Run/button

button onclick="stop();" type="button"Stop/button

br /

canvas id="interactiveEmitCanvas" width="400" height="400"/canvas

优点:可以在本页面编辑代码,并且看到实时效果,

缺点:页面需要引用相关js库,和本页代码逻辑混在一起。代码颜色黑白显示,用户体验差

b.岑安方式和司徒正美方式,如下图:

把代码放到一个iframe中,然后再新开页面执行该页面的代码。相关代码如下:

script type="text/javascript"

function runCode(id) {

obj = document.getElementById(id);

var TestWin=open(''); //打开一个窗口并赋给变量TestWin。

TestWin.opener = null // 防止代码对论谈页面修改

TestWin.document.write(obj.value); //向这个打开的窗口中写入代码code,这样就实现了运行代码功能。

TestWin.document.close();

}

/script

优点:逻辑分离,可以编辑运行。

缺点:需要新开页,代码黑白显示,用户体验差

C.外链方式

优点:不与本页html,css,js出现冲突,只要给出外链,不能编辑代码。

缺点:需要想SAE上传相关的js、img、css和html

D.jsFiddle方式,我直接拿岑安方式的代码作为例子:效果如下

这里有个小技巧:上面看到的iframe指定的src为"

最后的result,js,html,css为iframe中tab的显示的顺序,或者你不想显示html,css,你就可以直接写成

效果如下:

也可以显示result js和html,效果如下:

四.总结

比较这四种方式,我最喜欢最后一种,我相信喜欢最后一种的多一些,因为不仅演示的代码和博客的代码分离,html和CSS和js和最终效果也分离开了·

前端常用的几种在线代码编辑器各有什么优势

jsfiddle

Create a new fiddle

最经典的的编辑器了,主要写页面,没有集成console不太方面调JS

jsbin

JS Bin

跟jsfiddle差不多,有自带console挺适合调JS的,我最近几篇专栏文章的代码都是放在jsbin里的,可以方便的到处到gist很不错。但是存snapshot有点不清楚(反正我是还没弄清楚)。Node快闪 御用。

plunker

这个好像国内用的人不多,难道是被墙了?这是我见过的最贴近真实开发环境的ide,所有html js css文件一览无遗,不像jsfiddle一样隐藏html和body元素。要是有console就更好了。Angular1文档御用。

repl.it

Online REPL, Compiler IDE

这个大家可能见的不多,多语言环境,JS的是纯console环境,布局很干净,调JS挺好的。

codepen

CodePen

这个跟jsbin差不多,好像上面的代码大多数是CSS相关的。御用。

hackerrank

HackerRank

这个严格说是个比赛/面试环境,实时性不错,其它跟jsfiddle大同小异。我司电面御用。

runkit

RunKit is Node prototyping

这个是node编程用的,在线require( )各种包,看上去挺屌的,我还没怎么玩过。npm御用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。