AngularJS技术使用经验-达观数据
- 格式:docx
- 大小:549.95 KB
- 文档页数:11
AngularJS 使用指南 20210815 江丽娜----e5f4e5b6-6ea3-11ec-9176-7cb59b590d7dangularjs使用指南-20210815-江丽娜Angularjs用户指南作者:江丽娜modal的控制器继承父屏幕的$scope。
modal引入用fromtemplate方式时,返回的是object,所以与使用fromtemplateurl 时返回的promise不同,获取modal的使用应用下列方法。
有棱角的模块(“应用程序”)。
控制器('bindcardaddctrl',函数($scope,$ionicmodal){$scope.modal=$ionicmodal.fromtemplate('',{animation:'slide-in-up'});$scope.openmodal=function(){$scope.modal.show();};});有棱角的模块(“应用程序”)。
指令('banklist',function(){return{restrict:'e',scope:true,然后,在组件的controller中就能使用父画面的$scope了。
Jsonp可以用这种方式在JS中调用。
回调是jsonp的回调接口,必须给出contractno:contractnotxt,fundcode:fundcodetxt,}}). 成功(函数(数据、状态、标题、配置){console.log(\+data.msg);})。
error(function(data,status,headers,config){});这可以在服务器端设置stringcallback=request.getparameter(\);stringbuilderjsonp=newstringbuilder(cal lback);out.print(jsonp.tostring());如果没有服务器,可以创建本地TXT文件以模拟访问。
别责怪框架我使用AngularJS和ReactJS的经验导语:选择合适的前端框架一直是开发者们面临的一个重要问题。
在我过去的项目中,我使用过 AngularJS 和 ReactJS 这两个流行的前端框架。
本文将分享我的经验,分析它们的优缺点,让我们明白不应把责任全然推给框架,而是应该了解适合自己项目的工具,用适当的方式去使用它们。
引言:随着互联网技术的发展,前端开发也变得越来越重要。
前端框架的出现极大地促进了前端的发展,使得开发者们能够更高效地构建复杂的应用。
在过去几年中,AngularJS 和 ReactJS 分别在前端社区中崭露头角并广受欢迎。
它们各具特色,为我们提供了不同的开发理念和工具。
但在实际应用中,我们不能把所有的问题都归结到框架本身,而应该理性地评估并选择适合自己团队和项目的框架。
一、AngularJS 的经验与教训:1.优点:(a) 高度集成的特性:AngularJS 提供了完整的前端解决方案,包括数据绑定、路由、模板、依赖注入等功能。
这使得开发者可以更快速地构建单页应用。
(b) 丰富的第三方插件生态系统:由于 AngularJS 的流行,社区开发了大量的插件和库,可以帮助我们快速解决各种需求。
2.缺点:(a) 相对复杂:AngularJS 的学习曲线较陡峭,开发者需要掌握一系列概念和术语。
这可能导致一些新手对其难以掌握。
(b) 性能问题:由于双向数据绑定的机制,AngularJS 的性能可能受到影响,尤其是在处理大型数据集时。
这就需要我们在设计和实现上做出合理的权衡。
二、ReactJS 的经验与教训:1.优点:(a) 虚拟 DOM:ReactJS 使用虚拟 DOM 来实现高效的页面渲染,它能够最小化渲染的次数,提高性能。
(b) 组件化开发:ReactJS 倡导组件化开发,使我们能够更好地复用代码和逻辑,提高开发效率。
(c) 生态系统的成熟度:ReactJS 生态系统很丰富,有大量的库和工具,能够帮助我们解决各种需求。
AngularJS入门教程AngularJS是开发基于浏览器的响应式RWD应用程序的一个前端MVC 框架,由谷歌最初开发的开源项目,干净的架构吸引了大量粉丝,适合建立CRUD类型的业务应用程序,并不适合开发游戏等应用,使用声明性编程的用户界面和命令式编程的逻辑,支持现代桌面和移动浏览器InternetE某plorer版本8.0及以上。
AngularJS是一款客户端MVC的javacript框架,而客户端MVC代表未来架构(为什么要使用MVC+REST+CQRS架构),如果你有Strut或SpringMVC等后端MVC框架编程经验,学习Angular会很快,基本是按照同一个MVC思路实现的。
MVC模式见:Model模型:业务数据.通过$cope显露给视图ViewView视图:用户界面层数据绑定模型调用控制器的功能。
使用声明指令directive以便重用代码Controller控制器将视图和模型胶合一起提供功能方法使用服务,可重复使用的逻辑除了上面MVC模型以外,还提供以下组件(有些类似安卓):服务组件服务是可重用的业务逻辑组件可测试性能作为单身对象创建使用AngularJS依赖注入的注射依赖组件创建服的务作为一个模块的一部分一个模块可以依赖于另一个模块$q:异步请求使用,promie/deferred模块$routeProvider:配置路由$log:日志服务E-Element元素名称:A-Attribute属性:内建标准的指令有:ng-app(A)用来启动AngularJSng-controller(A,C)绑定控制器ng-model(A,C)绑定模型ng-change(E,A)ng-click(A,C)ng-repeat(A,C) Helloword第一个程序开始一个Angular项目,可以直接拷贝这个源码项目到你的目录即可(GitHub),然后在其基础上修改拓展。
例如一个inde某.html的代码如下图:其中有两个指令。
Angular框架深度解析与实战项目分享随着互联网行业的快速发展,前端技术也在不断演进,各种框架层出不穷。
其中,Angular框架作为一款强大而受欢迎的前端框架,成为许多开发者和企业的首选。
本文将对Angular框架进行深度解析,并分享一个实战项目的经验。
一、Angular框架的概述Angular是由Google开发的一款JavaScript前端框架,用于构建单页应用程序(SPA)。
与传统的网页开发相比,Angular采用了组件化的开发方式,使页面结构更加清晰,代码可复用性更强。
它还提供了丰富的功能与工具,包括依赖注入、模块化开发、数据绑定等,极大地提高了开发效率。
二、Angular框架的核心特性1. 组件化架构:Angular将页面拆分为若干独立的组件,每个组件负责特定的功能。
这种组件化的开发方式使得代码更加可读性强,维护起来更加方便。
2. 数据驱动视图:Angular采用了双向数据绑定的机制,数据的变化会自动同步到视图上,无需手动操作。
这大大减少了开发者的工作量,提高了用户体验。
3. 强大的模板语法:Angular的模板语法非常强大,可以轻松实现条件判断、循环遍历等功能。
通过模板语法,我们可以更加方便地操作页面的元素。
4. 依赖注入:Angular提供了依赖注入的机制,可以方便地管理组件之间的依赖关系。
这样一来,我们可以更加灵活地开发和扩展应用,减少了代码的耦合度。
三、实战项目分享在实际开发中,我们经常会遇到需要使用Angular框架的项目。
下面,我将分享一个实战项目的经验,希望对大家有所启发。
我们的项目是一个电商平台,需要实现商品展示、用户登录、购物车管理等功能。
首先,我们使用Angular CLI工具搭建了项目的基础结构。
然后,我们创建了各个模块和组件,分别负责不同的功能。
在商品展示模块中,我们使用了Angular的数据绑定机制,实现了商品列表的展示功能。
通过对数据的增删改查,我们可以方便地对商品进行管理。
如何使用AngularAngular是一款非常强大的前端框架,使用它可以让我们更加简单高效地开发Web应用。
那么如果你想要学习并使用Angular,下面就为你提供一些必要的指导。
一、前置知识在使用Angular之前,你需要先掌握一些基础的前端开发技能,比如HTML、CSS、JavaScript等。
此外,还需要了解一些Webpack、Node.js、NPM等相关的工具和技术。
如果你还没有这些基础,可以先学习一下。
二、安装Angular使用Angular,首先要安装相应的开发环境。
在安装之前,你需要先确保自己的电脑上已经安装了Node.js和NPM。
然后,通过以下命令安装Angular:```npm install -g @angular/cli```安装完成后,你就可以使用Angular CLI来创建新的Angular项目。
三、创建Angular项目使用Angular CLI,创建新的Angular项目非常简单。
只需要输入以下命令:```ng new my-app```这个命令会在当前目录下创建一个名为“my-app”的新项目。
然后,你就可以在该项目下进行开发了。
四、使用Angular开发在Angular中,一个应用由一系列组件组成。
每个组件都是一个独立的部分,负责展示和控制特定的内容。
你可以通过以下命令来创建新的组件:```ng generate component my-component```这个命令会在当前项目中创建名为“my-component”的新组件。
然后,在该组件的HTML文件中,你可以编写相应的页面布局和样式。
在它的TypeScript文件中,你可以编写相关的逻辑和业务代码。
除此之外,你还可以在组件的CSS文件中编写样式,或在组件的.ts文件中引入其他的库和模块。
最后,在你完成了一个组件的开发后,你就可以在Angular中将它展示出来。
只需要在相应的页面中,使用该组件的名称,就可以将其展示出来:```<app-my-component></app-my-component>```五、打包项目在完成了项目的开发之后,你需要将其打包成JavaScript文件。
AngularJS技术在Web应用中的实践随着Web应用的不断进步和发展,越来越多的前端开发者开始关注AngularJS这个前端框架,它可以帮助开发者更加高效地构建Web应用。
AngularJS是由谷歌公司开发的一款JavaScript框架,它采用了MVVM模式来构建Web应用。
它可以帮助开发者更快更方便地构建Web应用,同时提供了许多便捷的功能,使Web应用变得更加简单易用。
在本文中,我们将分享如何将AngularJS技术应用到Web应用中,以及它带来的优势和实践方法。
一、为什么要使用AngularJS技术1.1 更加高效地构建Web应用传统的前端开发方式大多采用jQuery等JavaScript库和CSS样式表,这种方式简单易用,但缺乏复用性和可维护性,开发效率不高。
而AngularJS则引入了MVVM模式,通过双向数据绑定和依赖注入等特性,可以帮助开发者更加高效地构建复杂的Web应用。
1.2 提供更多便捷的功能AngularJS提供了许多便捷的功能,例如路由管理、模板系统、表单验证等,使开发者不必再重复造轮子,而是可以直接使用现有的功能,提高编码效率。
1.3 适合构建SPAAngularJS特别适合构建单页面应用(SPA),因为它可以通过路由管理和模板系统实现页面切换,而不必像传统网站一样每次重新加载整个页面,提高了用户体验。
二、如何在Web应用中使用AngularJS技术2.1 引入AngularJS框架首先,我们需要在Web应用中引入AngularJS框架。
可以通过CDN(内容分发网络)引入,也可以直接下载复制到本地项目中。
通常情况下,我们会把AngularJS文件存放在项目目录下的`/lib/`目录中。
2.2 编写HTML文件在HTML文件中,我们需要定义模板、指令、数据绑定等AngularJS特有的元素和属性,例如`ng-app`、`ng-model`等。
2.3 编写JavaScript代码JavaScript代码是AngularJS应用的核心部分。
Angular1.x个⼈使⽤的经验⼩结前⾔angular1.x作为经典的mvc框架,可以创建能够复⽤的组件,也可进⾏双向数据绑定。
国内的vue.js/avaloon.js都是同类型的框架,之前⼯作以Angular1.x为主,主要做业务系统,以后⼯作中技术栈可能以vue为主,在此对Angular1.x的使⽤做⼀个简单总结,这⾥使⽤1.5+版本。
下⾯话不多说,来⼀起看看详细的介绍:基本概念1、依赖注⼊依赖注⼊,在angular中到处可见,这⾥不会照本宣科,只以很直⽩的⽅式的简单描述基本使⽤⽅式,以$scope注⼊为例。
创建⼀个controller,注⼊$scope,有三种写法:1)隐式注⼊function HomeController($scope){};2)内联注⼊app.controller('HomeController',['$scope',function($scope){ }])3)显式注⼊app.controller(‘HomeController',HomeController);HomeController.$inject=[‘$scope'];function HomeController($scope){}注意:由于第⼀种注⼊⽅式,是通过对函数做toString操作,然后使⽤正则匹配出参数名称,来实现注⼊,所以这种⽅式不能对代码进⾏压缩混淆处理。
2、directive指令系统,我认为是angular1.x版本中最强⼤也是最复杂的部分,angular作者本⾝做后端出⾝,所以在整个指令周期也符合语⾔处理过程:经过编译(compile函数,会返回link函数)、链接处理(link函数)。
1)指令最基本配置app.directive(‘dire',function(){return function(){ return { template/templateUrl:'', //模版 scope:{} //为true或为对象表⽰隔离作⽤域 restrict 'ACEM'//使⽤⽅式 link:function(scope,ele,attrs,controllers){} compile:function(ele,attr){return function(){}}//如果此函数存在,link函数会被忽略,因为compile函数会返回link函数 } }});2)关于绑定策略独⽴作⽤域⽗⼦作⽤域之间交换数据的⽅式,主要有三种(或说四种) @绑定,指令属性的值可以使⽤表达式,但是得出来的值⼀定是字符串; &绑定,表⽰引⽤绑定,主要绑定⽗作⽤域中函数,实现关注点的注⼊ =绑定,表⽰双向数据绑定 <绑定,表⽰单向绑定注意:对于&绑定的使⽤,主要是为了实现⼦作⽤域到⽗作⽤域的传递,个⼈⽐较喜欢vue中⽗⼦交互的⽅式:propsin,event out。
AngularJS学习总结详细介绍AngularJS学习文档新晨科技股份有限公司AngularJS介绍AngularJS学习文档欧阳龙蛟月日时分秒星期,你可以自由组合它们。
也可以使用不同的个数来限制格式化的位数。
另外参数也可以使用特定的描述性字符串,例如“shortTime”将会把时间格式为12:05pm这样的。
ng提供了八种描述性的字符串,个人觉得这些有点多余,我完全可以根据自己的意愿组合出想要的格式,不愿意去记这么多单词~3.filter(匹配子串)这个名叫filter的filter。
用来处理一个数组,然后可以过滤出含有某个子串的元素,作为一个子数组来返回。
可以是字符串数组,也可以是对象数组。
如果是对象数组,可以匹配属性的值。
它接收一个参数,用来定义子串的匹配规则。
下面举个例子说明一下参数的用法,我用现在特别火的几个孩子定义了一个数组:$scope.childrenArray=[{name:kimi,age:3},{name:cindy,age:4},{na me:anglar,age:4},{name:shitou,age:6},{name:tiantian,age:5}];$scop e.func=function(e){returne.age>4;}{{childrenArray|filter:a}}//匹配属性值中含有a的{{childrenArray|filter:4}}//匹配属性值中含有4的{{childrenArray|filter:{name:i}}}//参数是对象,匹配name属性中含有i的{{childrenArray|filter:func}}//参数是函数,指定返回age>4的4.json(格式化json对象)json过滤器可以把一个js对象格式化为json字符串,没有参数。
这东西有什么用呢,我一般也不会在页面上输出一个json串啊,官网说它可以用来进行调试,嗯,是个不错的选择。
如何使用Angular进行前端开发在现代的软件开发领域中,前端开发扮演着至关重要的角色。
随着移动设备的普及和互联网的高速发展,人们对于网页应用的需求也越来越高。
而Angular作为一种流行的前端开发框架,为开发者提供了许多强大的工具和功能,极大地简化了前端开发的流程。
本文将介绍如何使用Angular进行前端开发,并介绍一些最佳实践和技巧。
一、介绍AngularAngular是由Google开发的一个开源JavaScript框架,用于构建Web应用。
它采用了组件化的架构,将整个应用拆分为多个可重用的组件,并通过数据绑定和依赖注入等机制实现了组件之间的通信和数据共享。
Angular还提供了许多工具和库,用于处理路由、表单验证、HTTP请求等常见的前端开发任务。
它的设计理念是简单高效,使开发者能够更快地构建出功能强大且易于维护的Web应用。
二、安装和设置要开始使用Angular进行前端开发,首先需要安装Node.js和npm(Node包管理器)。
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,而npm则是Node.js的包管理器,用于安装和管理JavaScript包。
安装完Node.js和npm后,可以使用以下命令安装Angular CLI(命令行界面):```npm install -g @angular/cli```安装完成后,就可以使用`ng new`命令创建一个新的Angular项目。
例如,执行以下命令可以创建一个名为"my-app"的项目:```ng new my-app```三、创建和管理组件在Angular中,组件是构建Web应用的基本单位。
每个组件通常由一个HTML 模板文件、一个样式文件和一个类文件组成。
HTML模板定义了组件的结构和布局,样式文件定义了组件的外观和样式,而类文件则包含了组件的逻辑和数据。
要创建一个新的组件,可以使用`ng generate component`命令。
AngularJS技术使用经验-达观数据AngularJs诞生于2009年,最初由Misko Hevery和Adam Abrons开发,后来成为Google 的项目。
AngularJS 是一个为动态WEB应用设计的结构框架。
它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚、简洁地构建你的应用组件。
它的创新点在于,利用数据绑定和依赖注入,它使你不用再写大量的代码了。
这些全都是通过浏览器端的Javascript实现,这也使得它能够完美地和任何服务器端技术结合。
(达观数据陈高星)本文主要涵盖:AngularJsMVC模型、$scope,controller和数据双向绑定($apply(),$digest(),$watch)、module模块、AngularJs路由、过滤器和自定义过滤器(filter)、服务和自定义服务(provider, factory,service)、指令和自定义指令(directive)、依赖注入(DI)、Angular继承。
一、AngularMVC模型:MVC作为web应用程序的一种优秀的设计模式,由model,veiw,controller三部分组成,它隔离了应用逻辑从用户界面层和支持的关注点分离,所以常受欢迎。
Model负责管理应用程序的数据。
它响应来自视图的请求,同时也响应指令从控制器进行自我更新。
Veiw 即视图,它以一种特定的格式或者说样式来显示数据。
Controller负责响应于用户输入并执行交互数据模型对象。
控制器接收到输入,它验证输入,然后执行修改数据模型的状态的业务操作。
通常认为angular采用了MVC模型的设计模式(也有争论认为MVW或MVVM),后面涉及到的会较为详细解释。
二、Angular的$scope,controller和数据双向绑定($apply(),$digest(),$watch):$scope 对象在 AngularJS 中充当数据模型的作用,也就是一般 MVC 框架中 Model 得角色.但又不完全与通常意义上的数据模型一样,因为 $scope 并不处理和操作数据。
我理解$scope 类似于种子或者桥梁的角色,使controller可以获取数据模型的信息。
进一步系统的划分它的作用和功能:1.提供了观察者可以监听数据模型的变化2.可以将数据模型的变化通知给整个App3.可以进行嵌套,隔离业务功能和数据4.给表达式提供上下文执行环境$scope类似于javascript的原型链。
搜索的时候,优先找自己的scope,如果没有找到就沿着作用域链向上搜索,直至到达根作用域rootScope。
$rootScope是由angularJS加载模块的时候自动创建的,每个模块只会有1个rootScope。
rootScope创建好会以服务的形式加入到 $injector中。
也就是说通过 $injector.get("$ rootScope ");能够获取到某个模块的根作用域。
更准确的来说,$rootScope是由angularJS的核心模块ng创建的。
在AngularJS中,控制器Controller是一个Javascript函数(类型/类), 能通过表达式或者ng事件指令调用。
(比如,ngClick),从而达到处理数据的目地。
需要注意的一点是,一个控制器不应该做太多工作。
它应该只包含单个视图的业务逻辑,保持控制器职责单一的最常见做法是将那些不属于控制器的工作抽离到服务中,然后通过依赖注入在控制器中使用这些服务。
后面会讨论依赖注入服务。
AngularJs最迷人的一点便是双向数据绑定,AngularJS的工作原理是:HTML模板将会被浏览器解析到DOM中, DOM结构成为AngularJS编译器的输入。
AngularJS将会遍历DOM模板, 来生成相应的NG指令,所有的指令都负责针对view(即HTML中的ng-model)来设置数据绑定。
在HTML中:在JS中:但是需要注意,这种双向绑定仅限于angular的上下文,如果你在AngularJS上下文之外的任何地方修改了model,那么你就需要通过手动调用$apply()来通知AngularJS。
例如:这里,我们使用JavaScript的settimeout()来更新一个ScopeModel,所以我们把代码wrapped 到$scope.$apply()中(也可以用$watch来监控model变化),它会自动触发$rootScope.$digest(),从而让watchers被触发用以更新view。
三、Module 模块:如果全局的声明Controller等等,这样会污染全局命名空间。
模块化的方法还可以让代码的复用更加便捷,单元测试也更加方便。
例如:四、AngularJs路由:AngularJS路由功能是一个纯前端的解决方案,与我们熟悉的后台路由不太一样。
后台路由,通过不同的URL会路由到不同的控制器上(controller),再渲染(render)到页面(HTML)。
AngularJS的前端路由,需求提前对指定的(ng-app),定义路由规则(routeProvider),然后通过不同的URL,告诉(ng-app)加载哪个页面(HTML),再渲染到(ng-app)视图(ng- view)中。
目前单页面应用越来越受欢迎,而Angular在构建单页面应用上简直是标配。
这样构建的单页面应用的特点是单页、无刷新式页面变化,每个页面包含不同数据。
Angular路由由ngRoute模块提供,需要引用angular-route.min.js。
下面给出一个例子:文档结构:Index.html 部分:Js路由配置:模版template:ng-view 是一个用来包含当前路由(/home, /about, or /contact)的模板的angular指令, 它会获得基于特定路由的文件并将其诸如到主布局中(index.html).五、过滤器和自定义过滤器filter:AngularJS过滤器用类似于管道的方式来格式化输出给用户的数据。
除了格式化数据,过滤器还能修改DOM。
这使得过滤器通常用来做些如“适时地给输出加入CSS样式”等工作。
例如:AngularJs允许自定义filter:在你的模块中注册一个新的过滤器(可注入的)工厂函数。
这个工厂函数必须放回一个新的过滤器函数,这个过滤函数的第一个参数接受的是输入。
任何过滤器参数都会被当成附加的参数传递给过滤器。
可以通过| reverse的方式使用reverse过滤器。
六、服务和自定义服务(Factory, Service,Provider)前面提到过Controller应该很薄,不要把所有业务逻辑和操作都放到Controller里。
应该说,大部分的业务逻辑和持久化数据应该放到Service里。
Angular提供三种方式实现Service:Factory、Service、Provider。
1)用Factory就是创建一个对象,为它添加属性,然后把这个对象返回出来。
你把service 传进controller 之后,在controller 里这个对象里的属性就可以通过factory 使用了。
2)Service是用"new"关键字实例化的。
因此,你应该给"this"添加属性,然后service 返回"this"。
你把service 传进controller 之后,在controller里"this" 上的属性就可以通过service 来使用了。
3)Provider是唯一一种你可以传进.config() 函数的service。
当你想要在service 对象启用之前,先进行模块范围的配置,那就应该用provider。
七、指令和自定义指令directive:指令使我们用来扩展浏览器能力的技术之一。
在DOM编译期间,和HTML关联着的指令会被检测到,并且被执行。
这使得指令可以为DOM指定行为,或者改变它。
AngularJS有一套完整的、可扩展的、用来帮助web应用开发的指令集,它使得HTML 可以转变成“特定领域语言(DSL)”。
上面在docsTransclusionExample模块中创建了myDialog指令,那么<myDialog></myDialog>标签就会被解析成my-dialog.html模版的标签。
Directive的几个属性:Restrict:E(元素),A(属性),C(类),M(注释)默认值是AScope:默认值false,表示继承父作用域,true表示继承父作用域并创建自己的作用域,{}表示创建一个全新的隔离作用域。
当你想要创建一个可重用的组件时隔离作用域是一个很好的选择,通过隔离作用域我们确保指令是‘独立’的,并可以轻松地插入到任何HTML app中,并且这种做法防止了父作用域被污染。
Template:模版TemplateUrl:加载指定Url模版Link和compile负责渲染directive,compile在编译前执行,负责把template(包括transclude 所引用的)变成一个完整的DOM结构。
link在编译后执行,负责根据controller和scope,给compile得到的DOM注册事件、关联数据等等。
Transclude:true,false或者element,true表示提取包含在指令那个元素里面的内容,并可以使用ng-transclude来将它放置在指令模板的特定位置。
False表示不提取。
Element表示提取整个元素。
Replace:true表示替换当前元素,false表示拼接。
默认false。
八、依赖注入(DI):关于什么是依赖注入,在Stack Overflow上面有一个问题,如何向一个5岁的小孩解释依赖注入,其中得分最高的一个答案是:“When you go and get things out of the refrigerator for yourself, you can cause problems. You might leave the door open, you might get something Mommy or Daddy doesn’t want you to have. You might even be looking for something we don’t even have or which has expired.What you should be doing is stating a need, “I need something to drink with lunch,” and then we will make sure you have something when you sit down to eat.”一般获取依赖有三种方式,用new操作符创建依赖,通过全局变量查找,依赖需要时被导入。