>本文由Dan Prince和Michaela Lehr进行了同行评审。感谢SitePoint所有的同行评审员制作SitePoint内容的最佳状态! >随着AngularJS的每个新版本,开发团队都试图弥合AngularJs 1.x和2之间的差距。随着AngularJS 1.5的释放,开发人员将能够在结构上编写类似于AngularJS 2.0。
的应用程序。 在本教程中,我们将在AngularJS 1.4中创建一个网格指令。然后,我们将逐步升级到1.5,然后查看如何将其转换为使用2.0版。钥匙要点
>我们定义了一个名为“雇员”的常数,该常数包含一个示例数据的数组。然后,我们将此数组注入homectrl,并在控制器的范围上提供。
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
>因此,我们将添加限制选项以指定:
angular<span>.module('myApp', []) </span> <span>.constant('employees', [{ </span> <span>firstName: 'Rima', </span> <span>lastName: 'George', </span> <span>location: 'San Francisco' </span> <span>}, { </span> <span>firstName: 'Shaun', </span> <span>lastName: 'John', </span> <span>location: 'Germany' </span> <span>}, { </span> <span>firstName: 'Rahul', </span> <span>lastName: 'Kurup', </span> <span>location: 'Bangalore' </span> <span>}, { </span> <span>firstName: 'Samson', </span> <span>lastName: 'Davis', </span> <span>location: 'Canada' </span> <span>}, { </span> <span>firstName: 'Shilpa', </span> <span>lastName: 'Agarwal', </span> <span>location: 'Noida' </span> <span>}]) </span> <span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) { </span> $scope<span>.employees = employees; </span> <span>}]) </span>
接下来,我们要将员工数据从视图传递到指令。因此,我们将其添加为绑定:
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
>现在,我们可以将员工数据作为属性传递给指令:
angular<span>.module('myApp', []) </span> <span>.constant('employees', [{ </span> <span>firstName: 'Rima', </span> <span>lastName: 'George', </span> <span>location: 'San Francisco' </span> <span>}, { </span> <span>firstName: 'Shaun', </span> <span>lastName: 'John', </span> <span>location: 'Germany' </span> <span>}, { </span> <span>firstName: 'Rahul', </span> <span>lastName: 'Kurup', </span> <span>location: 'Bangalore' </span> <span>}, { </span> <span>firstName: 'Samson', </span> <span>lastName: 'Davis', </span> <span>location: 'Canada' </span> <span>}, { </span> <span>firstName: 'Shilpa', </span> <span>lastName: 'Agarwal', </span> <span>location: 'Noida' </span> <span>}]) </span> <span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) { </span> $scope<span>.employees = employees; </span> <span>}]) </span>
>在index.html的主体中添加以下HTML模板脚本。
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>} </span><span>}) </span>
>让我们在index.html内使用myGrid指令。添加以下代码:
<span><span><span><my-grid</span>></span><span><span></my-grid</span>></span> </span>
>我们已经指定了HOMECTRL控制器,并在内部使用了我们的指令。将更改保存并浏览到index.html页面。这是行动中数据网格的演示:
>
>请参阅codepen上的sitepoint(@sitepoint)的笔Angularjs 1.4演示。<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E' </span> <span>} </span><span>}) </span>
>升级到1.5
到目前为止,我们已经使用1.4版创建了一个AngularJS指令,并且运行良好。现在,让我们尝试使用AngularJS 1.5使用相同的代码,看看是否有任何事情破裂。>让我们用1.5版的CDN链接替换现有脚本引用。如果您尝试刷新页面,则所有内容都应该继续正常工作。随着1.x行的新版本,该框架正在更靠近AngularJS 2.0使用组件的工作方式,我们可以在代码中利用它,从而使最终过渡到版本2.0更容易。 在Angularjs 1.5中,组件是指令的句法糖,可照顾默认值并具有更简单的配置。他们应该被替换为替代品,尤其是对于那些希望将来升级的人。
与AngularJS合作时,开发人员通常倾向于使用基于控制器的方法,但这会随着应用程序开始增长而造成许多问题。基于控制器和基于视图的方法会导致重复的NG-Controller/View,但是基于组件的方法通过创建可以组成较大组件而无需重复代码的组件来解决问题。
>与指示方法(采用函数)不同,组件方法采用对象。我们将通过不同模板中的指令中的相同对象。这是HTML模板:
这是修改的组件代码:
>在上述代码中可以看到,我们传递了我们旧指令中的所有选项。
在index.html页面中创建一个称为mycomp的组件。
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E', </span> <span>scope: { </span> <span>info: '=info' </span> <span>} </span> <span>} </span><span>}) </span>
保存更改并刷新页面,您应该能够看到数据未显示,但浏览器控制台中也没有错误。
<span><span><span><my-grid</span> info<span>="employees"</span>></span><span><span></my-grid</span>></span> </span>
如果我们查看官方站点的组件和指令之间的比较图表,我们可以看到范围始终是隔离的组件。
这是修改的代码:
>
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
>
angular<span>.module('myApp', []) </span> <span>.constant('employees', [{ </span> <span>firstName: 'Rima', </span> <span>lastName: 'George', </span> <span>location: 'San Francisco' </span> <span>}, { </span> <span>firstName: 'Shaun', </span> <span>lastName: 'John', </span> <span>location: 'Germany' </span> <span>}, { </span> <span>firstName: 'Rahul', </span> <span>lastName: 'Kurup', </span> <span>location: 'Bangalore' </span> <span>}, { </span> <span>firstName: 'Samson', </span> <span>lastName: 'Davis', </span> <span>location: 'Canada' </span> <span>}, { </span> <span>firstName: 'Shilpa', </span> <span>lastName: 'Agarwal', </span> <span>location: 'Noida' </span> <span>}]) </span> <span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) { </span> $scope<span>.employees = employees; </span> <span>}]) </span>
>请参阅codepen上的sitepoint(@sitepoint)的笔Angularjs 1.5演示。
>升级到2.0
>让我们用CDN中的2.0版链接替换我们的应用中的AngularJS的现有版本,看看是否有任何破坏:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>} </span><span>}) </span>
>
如您所见,我们的组件代码与Angular 2.0!
>可以通过包含单个脚本标签的框架来开始使用Angular 1.X,但Angular 2.0的情况已更改。我们需要其他几个库才能运行。尽管可以通过脚本标签分别加载它们,但可以将它们捆绑在一起,以作为生产构建过程的一部分。
>>如果我们查看官方快速启动指南,我们可以看到我们需要其他一些库和开发依赖性才能开始使用2.0。
>让我们创建一个称为angularjs2.0component的文件夹,然后创建一个package.json文件,如下所示
上面的文件显示了AngularJS 2.0应用程序所需的所有依赖项。保存更改并使用npm安装所需的依赖项:
>创建一个名为app的子文件夹,并在内部创建一个名为app.component.js的文件,并具有以下代码:
<span><span><span><my-grid</span>></span><span><span></my-grid</span>></span> </span>
在上面的代码中,我们正在使用Angular Core命名空间NG.CORE创建一个组件。我们已经将组件的选择器定义为my-comp。我们使用相同的html,grid.html作为我们应用的模板。我们已经在组件的构造函数中定义了我们的员工对象。
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E' </span> <span>} </span><span>}) </span>
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
这告诉Angular加载我们刚刚创建的组件。
下一步,创建一个名为index.html的文件在应用程序文件夹之外,然后粘贴以下代码:
,但数据仍未显示!
>将其包裹起来 >组件是AngularJS 2.0的主要组成部分,可以说它基于组件的框架是正确的。在1.x行的每个新版本中,我们都在更靠近使用2.0版的应用程序开发应用程序。 >更深入地研究迁移您的AngularJS应用程序,请考虑阅读官方迁移指南。 Angular 2代码也可以用打字稿和DART编写,如果您有兴趣,我建议您分别阅读AngularJS 2的官方指南,分别是Typescript或Dart。
>从AngularJS升级到Angular时,我可能面临什么挑战? 我如何测试我的角度应用程序? Angular提供了一个称为测试台的测试框架,哪个允许您为组件创建动态测试环境。您还可以使用茉莉(Jasmine)(行为驱动的开发框架来测试JavaScript代码,以及测试跑步者Karma。 Angular还支持使用量角器的端到端测试。 有许多可用于学习角度的资源,包括官方的角度文档,在线教程,在线教程,书籍和课程。 Angular社区也非常活跃和支持,有许多论坛,博客和stackoverflow问题可供参考。angular<span>.module('myApp', [])
</span> <span>.constant('employees', [{
</span> <span>firstName: 'Rima',
</span> <span>lastName: 'George',
</span> <span>location: 'San Francisco'
</span> <span>}, {
</span> <span>firstName: 'Shaun',
</span> <span>lastName: 'John',
</span> <span>location: 'Germany'
</span> <span>}, {
</span> <span>firstName: 'Rahul',
</span> <span>lastName: 'Kurup',
</span> <span>location: 'Bangalore'
</span> <span>}, {
</span> <span>firstName: 'Samson',
</span> <span>lastName: 'Davis',
</span> <span>location: 'Canada'
</span> <span>}, {
</span> <span>firstName: 'Shilpa',
</span> <span>lastName: 'Agarwal',
</span> <span>location: 'Noida'
</span> <span>}])
</span>
<span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) {
</span> $scope<span>.employees = employees;
</span> <span>}])
</span>
<span>.directive('myGrid', function() {
</span> <span>return {
</span> <span>}
</span><span>})
</span>
经常询问有关升级到角度组件的问题(常见问题解答)
>
> typescript在Angular中的作用是什么?编译到普通的JavaScript。在Angular中,Typescript提供了静态键入,接口和类,这使代码更可维护和可测试。 TypeScript还提供了使用自动完成,类型检查和源地图支持的更好的工具,从而改善了开发体验。>角度支持移动设备如何通过提供响应迅速的布局和触摸支持来支持移动设备。它还为移动设备(例如懒惰加载和异步模板编译)提供了性能优化。 Angular还支持渐进式Web应用程序(PWA),可以安装在移动设备上并离线工作。
> >有哪些资源可用于学习角度?
以上是将您的应用程序升级到Angular 1.5组件及以后!的详细内容。更多信息请关注PHP中文网其他相关文章!