一天之内学AngularJS--权威指南
英文原文:Ultimate guide to learning AngularJS in one day 一天之内学AngularJS–权威指南AngularJs 是什么?Angular是基于javaScript语言构建的一个MVC/MVVM框架,对创建现代化单WEB应用(甚至是整个网站)至关重要。这篇文章是基于我的经验,建议及最佳实践而编写的一个非常全面的速成课程。 术语Angular有一个较短的学习曲线,你会对它有一个彻底的了解,当你掌握了基本操作后。对它的学习主要是慢慢掌握一些术语的概念并且认真去理解MVC思想,即模型 - 视图 - 控制器。下面是有关angular的更高层次的核心APIs以及一些术语。 MVC你可能曾听说过MVC,在许多编程语言里它被用作构建或设计应用程序/软件的一种手段。下面是对MVC的分解介绍: 模型:一端特定的应用程序中的数据结构,通常采用JSON进行数据传输。在你学习Angular之前,你最好仔细研究一下JSON。因为它在你的服务器与视图展示的数据交互中扮演者重要的角色。例如,一组用户标识可以采用如下的形式: {
"users" : [{ "name": "Joe Bloggs","id": "82047392" },{ "name": "John Doe","id": "65198013" }] }
然后,你将能够通过XHR(XMLHTTP请求)从服务器获取这些数据,在jQuery里它就是 视图:视图很简单,它可以是你的HTML或着渲染后的输出结果。使用MVC框架,你可以仅仅更新你的模型数据框架会自动更新您的视图并在HTML中展示相关数据。 控制器:他们控制东西,但又是什么东西呢? 数据!控制器是从服务器到视图的直接沟通者,也就是中间人,因此您可以在服务器和客户端进行通讯并即时更新数据。 建立一个AngularJS项目(最基本的)首先,我们实际上需要对Angular项目设置一些关键元素。再开始之前我们要注意,通常会有一个 一些带有 <div ng-app="myApp">
<div ng-controller="MainCtrl">
<!-- controller logic -->
</div>
</div>
一个Angular模块与控制器: var myApp = angular.module('myApp',[]);
myApp.controller('MainCtrl',['$scope',function ($scope) {
// Controller magic
}]);
在更深入之前,我们需要创建一个 angular.module('myApp',[])
.controller('MainCtrl',function ($scope) {...}])
.controller('NavCtrl',function ($scope) {...}])
.controller('UserCtrl',function ($scope) {...}]);
在我接触的Angular项目中,创建一个全局模块被证明是最佳实践。由于缺少分号或者“程序链”的意外断开经常适得其反并且产生不必要的编译错误。所以像下面这样吧: var myApp = angular.module('myApp',[]);
myApp.controller('MainCtrl',function ($scope) {...}]);
myApp.controller('NavCtrl',function ($scope) {...}]);
myApp.controller('UserCtrl',function ($scope) {...}]);
我所创建的每个新文件都只是简单的引用了 控制器现在你已经掌握了MVC的基本概念和项目基本的构建,接下来让我们看看Angular关于如何开始使用 就拿上面的例子来说,我们可以更进一步从一个 <div ng-app="myApp"> <div ng-controller="MainCtrl"> {{ text }} </div> </div>
var myApp = angular.module('myApp',function ($scope) {
$scope.text = 'Hello,Angular fanatic.';
}]);
实时输出结果如下: <iframe width="100%" height="230" src="//jsfiddle.net/toddmotto/mN7QB/embedded/result,js,html" allowfullscreen="allowfullscreen" frameborder="0">
</iframe>
这里的一个关键概念就是
让我们来看一些更具代表性的数据结构,假设这些数据是我们已经从服务器检索出的用来显示用户登录信息的数据。现在,我将使用静态数据;稍后我会告诉你如何获取动态的JSON数据。 首先我们将组织如下JavaScript : var myApp = angular.module('myApp',[]);
myApp.controller('UserCtrl',function ($scope) {
// Let's namespace the user details
// Also great for DOM visual aids too
$scope.user = {};
$scope.user.details = {
"username": "Todd Motto","id": "89101112"
};
}]);
然后将他植入DOM中来展示这些数据: <div ng-app="myApp">
<div ng-controller="UserCtrl">
<p class="username">Welcome,{{ user.details.username }}</p>
<p class="id">User ID: {{ user.details.id }}</p>
</div>
</div>
输出: <iframe width="100%" height="310" src="//jsfiddle.net/toddmotto/425KU/embedded/result,html" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
重要的是要记住,控制器仅用于数据操作和创建函数(当然还有事件方法)同我们的服务器进行通信并且推/拉JSON数据。DOM操作不应该在这里做,所以把你的jQuery的工具包去除吧。指令适用于DOM操作,但那是下一节要介绍的。 高级技巧:Angular 官方文档(在写这篇博文时)的例子展示了这种创建控制器的方法: var myApp = angular.module('myApp',[]);
function MainCtrl ($scope) {
//...
};
。。。千万别这样做。这将你的所有方法暴露到了全局作用域并且使之不能很好的与你的应用程序融合。这也意味着,你不能方便的压缩代码或运行测试。不要污染全局命名空间,你应该保证你的控制器始终在你的应用范围内。 指令一个 那么,指令究竟用来做什么呢?其实有很多事情,包括DOM组件,例如选项卡或导航元素 - 这完全取决于你的应用程序在UI层使用了什么。这样说吧,如果你使用了 在此次练习中,我会始终保持它非常简单,并创建一个被注入了那些我非常讨厌的打出来的一些标记的自定义类型按钮(被称为 <!-- 1: as an attribute declaration -->
<a custom-button>Click me</a>
<!-- 2: as a custom element -->
<custom-button>Click me</custom-button>
<!-- 3: as a class (used for old IE compat) -->
<a class="custom-button">Click me</a>
<!-- 4: as a comment (not good for this demo,however) -->
<!-- directive: custom-button -->
我更喜欢将他们作为一个属性使用,在HTML5的未来Web组件下的自定义元素即将涌现,但是Angular显示着在一些老的浏览器中表现非常糟糕。 现在你已经知道了如何在那些需要使用或注入指令的地方对他们进行声明,那就让我们开始创建这个自定义的按钮吧。同样,我将其挂在我的全局命名空间 myApp.directive('customButton',function () {
return {
link: function (scope,element,attrs) {
// DOM manipulation/events here!
}
};
});
我用 一个指令只需通过一个对象返回自身,并携带一系列参数。对我来说最重要的需要优先掌握的是, myApp.directive('customButton',function () {
return {
restrict: 'A',replace: true,transclude: true,template: '<a href="" class="myawesomebutton" ng-transclude>' +
'<i class="icon-ok-sign"></i>' +
'</a>',link: function (scope,attrs) {
// DOM manipulation/events here!
}
};
});
输出: <iframe width="100%" height="300" src="//jsfiddle.net/toddmotto/VC4H2/embedded/result,html" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
请务必检查元素,看那些被注入的额外标记。是的,我知道,这里并没有引入图标,因为我从未引入Font Awesome,但你看到了它是如何工作的。下面是指令属质的解释:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |