您的位置:首页 > Web前端 > AngularJS

初识AngularJS时遇到的HTML5不识别ng-*的问题

2016-03-23 12:42 621 查看
如何将ASPX中ng-app ,ng-include等等标签下面的烦人的绿线去掉。

简单介绍下AngularJS

AngularJS是为了克服HTML在构建应用上的不足而设计的。HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了。所以我做了一些工作(你也可以觉得是小花招)来让浏览器做我想要的事。

通常,我们是通过以下技术来解决静态网页技术在构建动态应用上的不足:

类库 - 类库是一些函数的集合,它能帮助你写WEB应用。起主导作用的是你的代码,由你来决定何时使用类库。类库有:jQuery等框架 - 框架是一种特殊的、已经实现了的WEB应用,你只需要对它填充具体的业务逻辑。这里框架是起主导作用的,由它来根据具体的应用逻辑来调用你的代码。框架有:knockout、sproutcore等。AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷。AngularJS通过使用我们称为标识符(directives)的结构,让浏览器能够识别新的语法。例如:

使用双大括号{{}}语法进行数据绑定;

使用DOM控制结构来实现迭代或者隐藏DOM片段;

支持表单和表单的验证;

能将逻辑代码关联到相关的DOM元素上;

能将HTML分组成可重用的组件。



AngularJS下载地址 http://angularjs.org

源码的部分:

(function(window, document, undefined) {

var
jqLite,           // delay binding since jQuery could be loaded after us.
jQuery,           // delay binding

/** @name angular */
angular           = window.angular || (window.angular = {}),
angularModule,
uid               = 0;

function noop() {}
noop.$inject = [];

function identity($) {return $;}
identity.$inject = [];

var jq = function() {
if (isDefined(jq.name_)) return jq.name_;
var el;
var i, ii = ngAttrPrefixes.length, prefix, name;
for (i = 0; i < ii; ++i) {
prefix = ngAttrPrefixes[i];
if (el = document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]')) {
name = el.getAttribute(prefix + 'jq');
break;
}
}

return (jq.name_ = name);
};

var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];

function getNgAttribute(element, ngAttr) {
var attr, i, ii = ngAttrPrefixes.length;
for (i = 0; i < ii; ++i) {
attr = ngAttrPrefixes[i] + ngAttr;
if (isString(attr = element.getAttribute(attr))) {
return attr;
}
}
return null;
}

function angularInit(element, bootstrap) {
var appElement,
module,
config = {};

// The element `element` has priority over any other element
forEach(ngAttrPrefixes, function(prefix) {
var name = prefix + 'app';

if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
appElement = element;
module = element.getAttribute(name);
}
});
forEach(ngAttrPrefixes, function(prefix) {
var name = prefix + 'app';
var candidate;

if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
appElement = candidate;
module = candidate.getAttribute(name);
}
});
if (appElement) {
config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
bootstrap(appElement, module ? [module] : [], config);
}
}


其中不难发现,它的定义

var ngAttrPrefixes = [‘ng-‘, ‘data-ng-‘, ‘ng:’, ‘x-ng-‘];

故,我们可以将ng-改成data-ng- 或者 x-ng-*。

真是解决了一大困惑。

原来的代码:



现在的代码:



哈哈哈哈哈。好棒!加油!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  html5 angularjs asp-net aspx