前端部分面试题整理,欢迎补充

news/2024/7/2 23:21:42
  • 1.ng中如何配置路由,$scope和$rootscope的原理
 ng中如何配置路由?1)使用内置路由模块ng-routevar app = angular.module('ngRouteExample', ['ngRoute']).controller('MainController', function($scope) {}).config(function($routeProvider, $locationProvider) {$routeProvider.when('/users', {templateUrl: 'user-list.html',controller: 'UserListCtrl'}).when('/users/:username', {templateUrl: 'user.html',controller: 'UserCtrl'});// configure html5$locationProvider.html5Mode(true);});2)第三方路由模块ui-route$stateProvider.state('contacts', {url: '/contacts',template: 'contacts.html',controller: 'ContactCtrl'}).state('contacts.detail', {url: "/contacts/:contactId",templateUrl: 'contacts.detail.html',controller: function ($stateParams) {// If we got here from a url of /contacts/42$stateParams.contactId === "42";}});scope是angularJS中的作用域(其实就是存储数据的地方),很类似javascript的原型链。搜索的时候,优先找自己的scope,如果没有找到就沿着作用域链向上搜索,直至到达根作用域rootScope。$rootScope是由angularJS加载模块的时候自动创建的,每个模块只会有1个rootScope。rootScope创建好会以服务的形式加入到$injector中。也就是说通过$injector.get("$rootScope");能够获取到某个模块的根作用域。更准确的来说,$rootScope是由angularJS的核心模块ng创建的。复制代码
  • 2.在ng 中的常用指令,服务注入的方式
   ng中常用的指令有:ng-class、ng-if、ng-show、ng-repeat、ng-style、ng-href、ng-src  还有一系列时间绑定的指令ng-click等等...1.内联式注入(最基本的方式)//最基本的依赖注入方式  var MyModule = angular.module("MyModule",[]);  MyModule.controller('MyCtrl',['$scope',  function($scope){             //可以修改参数,如$scope1,但下面必须同时改  $scope.gameName = "海哥帅!"  }  ]);  2.推断型注入//推断型注入方式:函数参数的名称必须要和被注入的对象相同  var MyModule = angular.module("MyModule",[]);  var MyCtrl = function($scope){  $scope.gameName = "海哥帅!";  }  MyModule.controller('MyCtrl',MyCtrl);  3.声明式注入//声明式注入  var MyModule = angular.module("MyModule",[]);  var MyCtrl = function(thisISMyName){//参数名称可以随意变化  thisISMyName.gameName = "weddy!";  }  MyCtrl.$inject = ['$scope'];//加载模块  MyModule.controller('MyCtrl',MyCtrl);复制代码
  • 3.ng中发起请求的内置服务是什么,原理是怎样的?
  ng中发起请求的内置服务是$http$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。,接收一个参数,这个参数是一个对象,包含了用来生成HTTP请求的配置内容,这个函数返回一个promise对象,具有success和error方法。var promise = $http({method:"post",          // 可以是get,post,put, delete,head,jsonp;常使用的是get,posturl:"./data.json",      //请求路径params:{'name':'lisa'},  //传递参数,字符串map或对象,转化成?name=lisa形式跟在请求路径后面data:blob,         //通常在发送post请求时使用,发送二进制数据,用blob对象。}).success(function(data){//响应成功操作}).error(function(data){//响应失败(响应以错误状态返回)操作})可以使用then()函数来处理$http服务的回调,then()函数接受两个可选的函数作为参数,表示success或error状态时的处理then()函数接收的resp(响应对象)包含5个属性: 1. data(字符串或对象):响应体2. status:相应http的状态码,如2003. headers(函数):头信息的getter函数,可以接受一个参数,用来获取对应名字的值4. config(对象):生成原始请求的完整设置对象5. statusText:相应的http状态文本,如"ok"复制代码

有关更多angular面试题请参考

  • 4.用CSS 实现两个div 交叉层叠的方式有哪几种?
 绝对定位absolute,浮动定位float,固定定位fixed,也可以使用3d转换属性transform;复制代码
  • 5.向一个标签插入内容的方式
常用的两种方法:innerHTML()方法appendChild()方法复制代码
  • 6.如何在一个数组后压入一个数
  arr[length]=数字arr.push(数字)复制代码
  • 7.Ajax 如何实现多线程请求数据,请求返回的是什么类型的数据
  由于js是单线程 所以ajax不能实现多线程请求数据如果想使用多线程,可以使用webworker请求返回的数据格式有xml或者json格式或者Text/HTML格式复制代码
  • 8.如何处理页面缓存问题?
方法1:GET请求URL后加随机数,让服务器认为是不同的请求,
如:"http://www.example.com/index.jsp?class=articele&page=5&t"+newDate().getTime();
方法2:在ajax发送请求前加上xmlHttpRequest.setRequestHeader("If-modified-since","0");
方法3:在ajax发送请求前加上xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
方法4:若为jquery ajax, 设置ajax属性cache:false;(注意:cache属性对post没有用,对get才有用)
方法5:在服务器端响应请求时加上response.setHeader("Cache-Control","no-cache,must-revalidate");
方法6:使用POST代替GET,浏览器不会对POST做缓存复制代码
  • 9.jquery如何消除不同模块之间的$的影响
 $是JQuery的别名,所以使用$的地方都可以使用JQuery来替换那么如何解决如题目所说的冲突呢?
1.其实jquery已经考虑到了这个问题,使用JQuery.noConflict()  该方法的作用就是让JQuery放弃对$的所有权
2.第二种方法就是自定义JQuery的别名var $j = JQuery.noConflict(); 
在jquery中使用$j;
3.也可以使用语句块,在语句块中仍然使用jquery.js中定义的$(function($) { //你的js代码 })(jQuery);只总结这么多了,如果还有其他的欢迎补充了...复制代码

转载于:https://juejin.im/post/59c131966fb9a00a562e7e69


http://lihuaxi.xjx100.cn/news/239481.html

相关文章

远程协助软件开发_这是我从事远程软件开发人员工作的主要技巧

远程协助软件开发by Colin Morgan通过科林摩根(Colin Morgan) 这是我从事远程软件开发人员工作的主要技巧 (Here are the top tips I’ve used to land a remote software developer job) Applying for a remote software developer job means you are voluntarily choosing t…

linux查找文件

find . | grep xyz 将当前目录下(包括子目录)的文件名中含有xyz的文件过滤出来 find . | xargs grep xyz 将当前目录下(包括子目录)的文件内容中含有xyz的行过滤出来 转载于:https://www.cnblogs.com/anovana/p/8036032.html

mysql查询解析过程_MySQL查询执行过程详解

查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览。查询是一个独立的、功能强大的、具有计算功能和条件检索功能的数据库对象。MySQL数据库中,MySQL查询同样是数据库的核心操作&#xff0…

Java云托管服务的开支削减策略

\摘要\随着项目不断扩大,你需要将其迁移到更大的虚拟机上。但如果新虚拟机环境超出了你的需求则会产生额外开支。\相比虚拟机,容器具有更小的粒度,并且无需重启运行中的实例即可垂直扩展。\单体应用和历史遗留应用无需更改配置,即…

flask url构建_如何为生产构建构建Flask-RESTPlus Web服务

flask url构建by Greg Obinna由格雷格奥比纳(Greg Obinna) 如何为生产构建构建Flask-RESTPlus Web服务 (How to structure a Flask-RESTPlus web service for production builds) In this guide I’ll show you a step by step approach for structuring a Flask RESTPlus web…

第一个spring boot应用

前提 首先要确保已经安装了java和maven: $ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) $ mvn -v Apache Maven 3.3.9 (bb52d850…

刷新mysql的权限相关表_flush privileges刷新MySQL的系统权限相关表

mysql> flush privilegesmysql> update mysql.user set passwordPASSWORD(‘新密码’) where User’root’;mysql> flush privileges;mysql> quit答:mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问&am…

linux的挂载命令

在linux中所有的存储设备都必须挂载后才能使用,相当于windows的分配盘符 挂载命令 mount #查看系统中已经挂载好的设备 mount -a #根据/etc/fstab中的内容,自动挂载 /etc/fstab是系统开机的自动挂载文件 系统挂载时要自动检车测这个文件,如果…