Vue前端面试题

这篇具有很好参考价值的文章主要介绍了Vue前端面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Angular

1,ng-if 跟 ng-show/hide 的区别有哪些? 第一点区别是,ng-if 在后面表达式为 true 的时候才创建这个 dom 节点,ng-show 是初始时就创建了,用 display:blockdisplay:none 来控制显示和不显示。 第二点区别是,ng-if 会(隐式地)产生新作用域,ng-switchng-include 等会动态创建一块界面的也是如此。 这样会导致,在 ng-if 中用基本变量绑定 ng-model,并在外层 div 中把此 model 绑定给另一个显示区域,内层改变时,外层不会同步改变,因为此时已经是两个变量了。

<p>{
  
  {name}}</p>
<div ng-if="true">
	<input type="text" ng-model="name">
</div>

复制

ng-show 不存在此问题,因为它不自带一级作用域。 避免这类问题出现的办法是,始终将页面中的元素绑定到对象的属性(data.x)而不是直接绑定到基本变量(x)上。

2,ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决? 会提示 Duplicates in a repeater are not allowed. 加 track by $index 可解决。当然,也可以 trace by 任何一个普通的值,只要能唯一性标识数组中的每一项即可(建立 dom 和数据之间的关联)。

3,ng-click 中写的表达式,能使用 JS 原生对象上的方法吗? 不止是 ng-click 中的表达式,只要是在页面中,都不能直接调用原生的 JS 方法,因为这些并不存在于与页面对应的 Controller$scope 中。

4、factory、service 和 provider 是什么关系? factory:把 service 的方法和数据放在一个对象里,并返回这个对象 service:通过构造函数方式创建 service,返回一个实例化对象 provider:创建一个可通过 config 配置的 service,get中返回的,就是用factory创建service的内容从底层实现上来看,service调用了factory,返回其实例;factory调用了provider,返回其get 中定义的内容。factory 和 service 功能类似,只不过 factory 是普通 function,可以返回任何东西(return 的都可以被访问,所以那些私有变量怎么写,你懂的); service 是构造器,可以不返回(绑定到 this 的都可以被访问); provider 是加强版 factory,返回一个可配置的 factory。

5、angular 中控制器之间如何通信? 1、Service 2、events,指定绑定的事件 3、使用 rootScope4、controller之间直接使用parent,

6,angular 的数据绑定采用什么机制?详述原理 使用的脏检查机制,所谓的双向绑定,其实就是从界面的操作能实时反映到数据,数据的变更能实时展现到界面。AngularJS在scope变量中使用脏值检查来实现了数据双向绑定,并且可以通过scope.watch来监听变化触发回调;angular中使用的是脏检查机制,在angular中每次你绑定一些东西到你的UI上时你就会往watch队列里插入一条watch,当我们的模版加载完毕时,也就是在linking阶段(Angular分为compile阶段和linking阶段—译者注),Angular解释器会寻找每个directive,然后生成每个需要的watch。当浏览器接受到可以被angular context处理的事件时就会触发digest循环,这个循环是由两个更小的循环组合起来的,一个是watch列表,一个是evalAsync列表,而watch列表在digest循环中被“脏值检查”解析,在digest将会遍历我们的watch,然后询问它是否有属性和值的变化,直到watch队列都检查过,在检查数据变化的时候,由于并不知道这个事件是对哪些数据进行了更改,以及这个事件有可能造成事件之外的其他任何地方的数据更改,所以必须进行一次大检查,将所有“注册”过的值全部检查一遍,一次检查称为一个周期,每次最少检查两遍,因为第二遍用来确认,前一遍的变动中是否有数据的变动,导致了其他数据的变动,如果第二次有变动的话,会再执行一遍,直到最后两次完全一致,则停止检查(其实就是个(递归(遍历))的过程),考虑到内存的消耗和死循环的风险,脏检查每个周期最多递归执行10遍,如果超过10遍就会抛出一个错误。当digest循环结束时,DOM相应地变化。 在angular中 ng-click,ng-change,ng-blur...就是对各类用户事件的封装 timeout,http,window,location...就是对各种JS/API事件的封装 ng-model,以及控制器中的数据,就是对值的“注册” scope本质是一个总的事件逻辑的封装容器,同时抽象为数据载体,实质上数据都存在于浏览器堆内存中容器,同时抽象为数据载体,实质上数据都存在于浏览器堆内存中 scope.apply() &

<button ng-click="val=val+1">increase 1</button>

复制

click 时会产生一次更新的操作(至少触发两次 digest循环)按下按钮浏览器接收到一个事件,进入到angularcontextdigest 循环开始执行,查询每个 watch是否变化由于监视scope.val 的 watch报告了变化,因此强制再执行一次digest 循环 新的 digest循环未检测到变化浏览器拿回控制器,更新scope.val 新值对应的 dom

7、一个 angular 应用应当如何良好地分层? 目录结构的划分 对于小型项目,可以按照文件类型组织,比如:

css
js
  controllers 
  models 
  services 
  filters 
templates 

复制

但是对于规模较大的项目,最好按业务模块划分,比如:

css
modules
  account 
    controllers 
    models 
    services 
    filters 
    templates 
  disk 
    controllers 
    models 
    services 
    filters 
    templates 

复制

modules 下最好再有一个 common 目录来存放公共的东西。 逻辑代码的拆分 作为一个 MVVM 框架,Angular 应用本身就应该按照 模型,视图模型(控制器),视图来划分。 这里逻辑代码的拆分,主要是指尽量让 controller 这一层很薄。提取共用的逻辑到 service 中 (比如后台数据的请求,数据的共享和缓存,基于事件的模块间通信等),提取共用的界面操作到 directive 中(比如将日期选择、分页等封装成组件等),提取共用的格式化操作到 filter 中等等。 在复杂的应用中,也可以为实体建立对应的构造函数,比如硬盘(Disk)模块,可能有列表、新建、详情这样几个视图,并分别对应的有 controller,那么可以建一个 Disk 构造函数,里面完成数据的增删改查和验证操作,有跟 Disk 相关的 controller,就注入 Disk 构造器并生成一个实例,这个实例就具备了增删改查和验证方法。这样既层次分明,又实现了复用(让 controller 层更薄了)。

8、angular 应用常用哪些路由库,各自的区别是什么? Angular1.x 中常用 ngRouteui.router,还有一种为 Angular2 设计的 new router(面向组件)。后面那个没在实际项目中用过,就不讲了。 无论是 ngRoute 还是 ui.router,作为框架额外的附加功能,都必须以 模块依赖 的形式被引入。 区别 ngRoute 模块是 Angular 自带的路由模块,而 ui.router 模块是基于 ngRoute模块开发的第三方模块。

ui.router 是基于 state (状态)的, ngRoute 是基于 url 的,ui.router模块具有更强大的功能,主要体现在视图的嵌套方面。

使用 ui.router 能够定义有明确父子关系的路由,并通过 ui-view 指令将子路由模版插入到父路由模板的 <div ui-view></div>中去,从而实现视图嵌套。而在 ngRoute 中不能这样定义,如果同时在父子视图中 使用了 <div ng-view></div>会陷入死循环。

分属不同团队进行开发的 angular 应用,如果要做整合,可能会遇到哪些问题,如何解决? 可能会遇到不同模块之间的冲突。 比如一个团队所有的开发在 moduleA 下进行,另一团队开发的代码在 moduleB 下

angular.module('myApp.moduleA', [])
    .factory('serviceA', function(){ 
        ... 
    }) 
angular.module('myApp.moduleB', [])
    .factory('serviceA', function(){ 
        ... 
    })    

angular.module('myApp', ['myApp.moduleA', 'myApp.moduleB'])   

复制

会导致两个 module 下面的 serviceA 发生了覆盖。

貌似在 Angular1.x 中并没有很好的解决办法,所以最好在前期进行统一规划,做好约定,严格按照约定开发,每个开发人员只写特定区块代码。

9、angular 的缺点有哪些? 强约束 导致学习成本较高,对前端不友好。 但遵守 AngularJS 的约定时,生产力会很高,对 Java 程序员友好。 不利于 SEO 因为所有内容都是动态获取并渲染生成的,搜索引擎没法爬取。 一种解决办法是,对于正常用户的访问,服务器响应 AngularJS 应用的内容;对于搜索引擎的访问,则响应专门针对 SEO 的HTML页面。

性能问题 作为 MVVM 框架,因为实现了数据的双向绑定,对于大数组、复杂对象会存在性能问题。 可以用来 优化 Angular 应用的性能 的办法: 减少监控项(比如对不会变化的数据采用单向绑定) 主动设置索引(指定 track by,简单类型默认用自身当索引,对象默认使用 $$hashKey,比如改为 track by item.id) 降低渲染数据量(比如分页,或者每次取一小部分数据,根据需要再取) 数据扁平化(比如对于树状结构,使用扁平化结构,构建一个 map 和树状数据,对树操作时,由于跟扁平数据同一引用,树状数据变更会同步到原始的扁平数据) 另外,对于Angular1.x ,存在 脏检查模块机制 的问题。

移动端 可尝试 Ionic,但并不完善。

10、解释下什么是rootScrope以及和scope的区别? 通俗的说rootScrope页面所有scope的父亲 如何产生rootScope和scope吧。 step1:Angular解析ng-app然后在内存中创建rootScope。step2:angular回继续解析,找到表达式,并解析成变量。step3:接着会解析带有ng−controller的div然后指向到某个controller函数。这个时候在这个controller函数变成一个scope对象实例。

**11、如何取消 timeout,以及停止一个watch()? ** 停止

var customTimeout = $timeout(function () {
 // your code
}, 1000);
$timeout.cancel(customTimeout);

复制

停掉一个watch://.watch() 会返回一个停止注册的函数

function that we store to a variable
var deregisterWatchFn = $rootScope.$watch(‘someGloballyAvailableProperty', function (newVal) {
 if (newVal) {
  // we invoke that deregistration function, to disable the watch 
  deregisterWatchFn(); 
  ... 
 }
});

复制

11、Angular Directive中restrict 中分别可以怎样设置?scope中@,=,&有什么区别? restrict中可以分别设置: A匹配属性 E匹配标签 C匹配class M 匹配注释 当然你可以设置多个值比如AEC,进行多个匹配。 在scope中,@,=,&在进行值绑定时分别表示 @获取一个设置的字符串,它可以自己设置的也可以使用{ {yourModel}}进行绑定的; = 双向绑定,绑定scope上的一些属性; &用于执行父级scope上的一些表达式,常见我们设置一些需要执行的函数

15、apply()和digest()的区别 安全性:apply()可以接收一个参数作为function(),这个function会被包装到一个try…catch块中,所以一旦有异常发生,该异常会被exceptionHandler service 处理。 apply会使ng进入digest cycle , 并从rootScope开始遍历(深度优先)检查数据变更。digest仅会检查该scope和它的子scope,当你确定当前操作仅影响它们时,用文章来源地址https://www.toymoban.com/news/detail-506718.html

到了这里,关于Vue前端面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java后端面试题——Mysql篇

    在Mysql中,如何定位慢查询呢? 表象:页面加载过慢、接口压测响应时间过长(超过1s) 原因: 聚合查询 多表查询 表数据量过大查询 深度分页查询 方案:MySQL自带慢日志 需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息: # 开启MySQL慢日志查询开关 slow_query_log=1 # 设置慢日

    2024年02月12日
    浏览(39)
  • 2023年精选出来的Java后端面试题

    1、Java与C++的区别? Java源码会先经过编译器编译成字节码(class文件),然后由JVM中内置的解释器解释成机器码。而C++源码直径过一次编译,直接在编译的过程中链接了,形成机器码 C++比Java执行效率快,但是Java可以利用JVM跨平台 Java是纯面向对象的语言,所有代码都必须在勒种

    2024年02月09日
    浏览(40)
  • 三大前端技术(React,Vue,Angular)

    React(也被称为React.js或ReactJS)是一个用于构建用户界面的JavaScript库。它由Facebook和一个由个人开发者和公司组成的社区来维护。 React可以作为开发单页或移动应用的基础。然而,React只关注向DOM渲染数据,因此创建React应用通常需要使用额外的库来进行状态管理和路由,Red

    2024年02月09日
    浏览(54)
  • 如何在 Angular 中使用 ng2-charts 来使用 Chart.js

    介绍 Chart.js 是一个流行的 JavaScript 图表库, ng2-charts 是 Angular 2+ 的一个包装器,用于在 Angular 中集成 Chart.js。 在本教程中,您将使用 Chart.js 和 ng2-charts 在 Angular 应用程序中创建示例图表。 要完成本教程,您需要: 本地安装了 Node.js,您可以按照《如何安装 Node.js 并创建本地

    2024年02月20日
    浏览(47)
  • 2023年前端面试题考点之 通信(渲染、http、缓存、异步、跨域、安全)

    合集:2023年最全前端面试题考点HTML5+CSS3+JS+Vue3+React18+八股文+手写+项目+笔试_参宿7的博客-CSDN博客 本章内容为一面基础面 为了简洁,相关文章参考链接在标题里 目录 服务器端渲染 基本概念 服务器端渲染SSR(前端服务器node,react/vue,seo) 客户端渲染CSR 浏览器从输入url到渲

    2024年02月02日
    浏览(48)
  • Angular 异常 NG0904: unsafe value used in a resource URL context

    问题描述 主要是用变量对iframe页面的参数进行赋值时报错,直接使用字符串不会报错、 故障原因 -因为在iframe中执行angular不信任的操作,需要使用angular提供的DomSanitizer 解决办法 使用Angular提供的DomSanitizer 创建一个Pipe 声明Pipe 使用pipe 参考链接 1.Unsafe value used in a resource URL

    2024年02月13日
    浏览(38)
  • 2023前端超全面试题,全是金三银四面试真题整理!附答案。

    目录 HTML 标签语意化 HTML5新特性 SEO input元素的类型 iframe的特点 CSS Flex BFC 重排重绘 CSS优先级 CSS3新特性 清除浮动的方法 盒模型的理解 响应式布局 移动适配方案 三栏布局 圣杯布局和双飞翼布局 JS JS为何是单线程 JS数据类型 js判断数据类型 js中的length属性 判断空对象 判断空

    2024年02月08日
    浏览(50)
  • 前端开发框架生命周期详解:Vue、React和Angular

    作为前端开发者,掌握前端开发框架的生命周期是非常重要的。在现代Web应用开发中,Vue.js、React和Angular是三个最流行的前端开发框架。本篇博客将详细解读这三个框架的生命周期,包括每个阶段的含义、用途以及如何最大限度地利用它们。通过详细的代码示例和实用的技巧

    2024年02月13日
    浏览(53)
  • 前端框架之战:React vs Vue vs Angular

    前端框架在现代网页开发中扮演着越来越重要的角色,它们为开发者提供了一种更高效、可扩展的方式来构建复杂的用户界面。在过去的几年里,我们看到了许多前端框架和库的出现,如React、Vue和Angular等。这三个框架分别由Facebook、Google和AngularJS团队开发,它们都是目前最

    2024年02月03日
    浏览(51)
  • 【前端架构】Angular,React,Vue那个是2023的最佳选择?

    当开始一个新的web开发项目时,许多开发人员都有一个问题:“什么工具是最合适的?” 显然,JavaScript是骨干,因为今天它提供了创建前端的广泛功能。但是人们在选择框架时面临着两难,因为JS中有很多框架,而且每个框架都有突出的特性。 通常,争论都是基于三个框架——

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包