关于AngularJS的面试题及其答案解析


我的血液里流淌着战意!力量与智慧指引着我!

文章目录

      • [1. 什么是AngularJS?](#1. 什么是AngularJS?)
      • [2. 解释一下MVVM模式,并说明AngularJS如何实现它?](#2. 解释一下MVVM模式,并说明AngularJS如何实现它?)
      • [3. AngularJS中的指令是什么?请举例说明。](#3. AngularJS中的指令是什么?请举例说明。)
      • [4. 如何理解AngularJS中的依赖注入?有何优势?](#4. 如何理解AngularJS中的依赖注入?有何优势?)
        • [1. 服务(Service)的依赖注入](#1. 服务(Service)的依赖注入)
        • [2. 工厂(Factory)的依赖注入](#2. 工厂(Factory)的依赖注入)
        • [3. 提供者(Provider)的依赖注入](#3. 提供者(Provider)的依赖注入)
        • [4. 常量(Constant)和值(Value)的依赖注入](#4. 常量(Constant)和值(Value)的依赖注入)
        • [5. 指令(Directive)的依赖注入](#5. 指令(Directive)的依赖注入)
      • [5. 什么是AngularJS中的服务?如何创建和使用服务?](#5. 什么是AngularJS中的服务?如何创建和使用服务?)
      • [6. 解释一下AngularJS中的路由及其作用。](#6. 解释一下AngularJS中的路由及其作用。)
      • [7. AngularJS中的模块是如何工作的?请简要说明。](#7. AngularJS中的模块是如何工作的?请简要说明。)
      • [8. 如何实现AngularJS中的表单验证?](#8. 如何实现AngularJS中的表单验证?)
        • [1. 基本表单验证](#1. 基本表单验证)
        • [2. 自定义验证器](#2. 自定义验证器)
        • [3. 表单提交处理](#3. 表单提交处理)
      • [9. 什么是AngularJS中的双向数据绑定?它与单向数据绑定有何区别?](#9. 什么是AngularJS中的双向数据绑定?它与单向数据绑定有何区别?)
      • [10. 如何优化AngularJS应用程序的性能?](#10. 如何优化AngularJS应用程序的性能?)
      • [11. AngularJS中的观察者模式是如何工作的?](#11. AngularJS中的观察者模式是如何工作的?)
      • [12. 解释一下AngularJS中的模板缓存及其作用。](#12. 解释一下AngularJS中的模板缓存及其作用。)
      • [13. 如何在AngularJS中实现懒加载?](#13. 如何在AngularJS中实现懒加载?)
      • [14. AngularJS中的指令优先级是如何确定的?](#14. AngularJS中的指令优先级是如何确定的?)
      • [15. 什么是AngularJS中的生命周期钩子?请列举几个常用的钩子及其用途。](#15. 什么是AngularJS中的生命周期钩子?请列举几个常用的钩子及其用途。)
      • [16. 如何理解AngularJS中的脏检查机制?](#16. 如何理解AngularJS中的脏检查机制?)
      • [17. 在AngularJS中如何实现自定义指令?请简要说明步骤。](#17. 在AngularJS中如何实现自定义指令?请简要说明步骤。)
      • [18. 什么是AngularJS中的Promise?它在异步操作中有何作用?](#18. 什么是AngularJS中的Promise?它在异步操作中有何作用?)
      • [19. 如何测试AngularJS应用程序?有哪些常用的测试工具和方法?](#19. 如何测试AngularJS应用程序?有哪些常用的测试工具和方法?)
      • [20. 解释一下AngularJS中的Interceptor及其应用场景。](#20. 解释一下AngularJS中的Interceptor及其应用场景。)
      • [21. AngularJS中的事件传播机制是怎样的?](#21. AngularJS中的事件传播机制是怎样的?)
      • [22. 如何在AngularJS中实现跨域请求?](#22. 如何在AngularJS中实现跨域请求?)
      • [23. AngularJS中的过滤器是什么?如何使用它们?](#23. AngularJS中的过滤器是什么?如何使用它们?)
      • [24. 什么是AngularJS中的组件?它与传统的指令有何不同?](#24. 什么是AngularJS中的组件?它与传统的指令有何不同?)
      • [25. 在AngularJS中如何实现本地存储?有哪些方法?](#25. 在AngularJS中如何实现本地存储?有哪些方法?)
      • [26. 解释一下AngularJS中的Observable及其作用。](#26. 解释一下AngularJS中的Observable及其作用。)
      • [27. 如何确保AngularJS应用程序的安全性?有哪些最佳实践?](#27. 如何确保AngularJS应用程序的安全性?有哪些最佳实践?)
      • [28. AngularJS中的深拷贝和浅拷贝有何区别?如何实现深拷贝?](#28. AngularJS中的深拷贝和浅拷贝有何区别?如何实现深拷贝?)
      • [29. 什么是AngularJS中的变更检测周期?它是如何工作的?](#29. 什么是AngularJS中的变更检测周期?它是如何工作的?)
      • [30. 在AngularJS项目中如何管理第三方库的依赖关系?](#30. 在AngularJS项目中如何管理第三方库的依赖关系?)

1. 什么是AngularJS?

答案:AngularJS是一个由Google维护的开源JavaScript框架,用于构建动态的单页面Web应用程序。它提供了一种结构化的方式来组织代码,通过指令扩展HTML,实现了数据绑定和依赖注入等特性,使得开发更加高效、便捷。

2. 解释一下MVVM模式,并说明AngularJS如何实现它?

答案:MVVM即Model-View-ViewModel,是一种设计模式。在AngularJS中,通过$scope作为ViewModel层,将Model和View进行绑定。当Model发生变化时,View会自动更新;反之亦然。这种机制使得数据的同步变得自动化,简化了开发者的工作。

3. AngularJS中的指令是什么?请举例说明。

答案:指令是AngularJS中一种特殊的标记,用于扩展HTML元素的功能。例如ng-bind指令可以将模型数据绑定到视图上,实现数据的自动更新。又如ng-model指令,它可以实现双向数据绑定,使用户输入的数据能够实时反映到模型上。

4. 如何理解AngularJS中的依赖注入?有何优势?

答案:依赖注入是一种设计模式,它将对象的依赖关系通过构造函数、属性或方法注入的方式交给外部管理,而不是在对象内部创建它们。在AngularJS中,依赖注入可以使得组件之间的解耦更加容易,提高了代码的可测试性和可维护性。同时,它也使得代码更加灵活,便于后期的扩展和维护。

1. 服务(Service)的依赖注入
javascript 复制代码
// 定义一个服务
angular.module('myApp', [])
  .service('MyService', function() {
    this.sayHello = function() {
      return 'Hello, World!';
    };
  });

// 使用依赖注入将服务注入到控制器中
angular.module('myApp')
  .controller('MyController', ['MyService', function(MyService) {
    var vm = this;
    vm.greeting = MyService.sayHello();
  }]);
2. 工厂(Factory)的依赖注入
javascript 复制代码
// 定义一个工厂
angular.module('myApp', [])
  .factory('MyFactory', function() {
    return {
      sayHello: function() {
        return 'Hello from Factory!';
      }
    };
  });

// 使用依赖注入将工厂注入到控制器中
angular.module('myApp')
  .controller('MyController', ['MyFactory', function(MyFactory) {
    var vm = this;
    vm.greeting = MyFactory.sayHello();
  }]);
3. 提供者(Provider)的依赖注入
javascript 复制代码
// 定义一个提供者
angular.module('myApp', [])
  .provider('MyProvider', function() {
    var greeting = 'Hello from Provider!';
    
    this.setGreeting = function(newGreeting) {
      greeting = newGreeting;
    };
    
    this.$get = function() {
      return {
        sayHello: function() {
          return greeting;
        }
      };
    };
  });

// 配置提供者
angular.module('myApp')
  .config(['MyProvider', function(MyProvider) {
    MyProvider.setGreeting('Hello, configured world!');
  }]);

// 使用依赖注入将提供者注入到控制器中
angular.module('myApp')
  .controller('MyController', ['MyProvider', function(MyProvider) {
    var vm = this;
    vm.greeting = MyProvider.sayHello();
  }]);
4. 常量(Constant)和值(Value)的依赖注入
javascript 复制代码
// 定义一个常量和一个值
angular.module('myApp', [])
  .constant('MY_CONSTANT', 'This is a constant value')
  .value('MY_VALUE', 'This is a value');

// 使用依赖注入将常量和值注入到控制器中
angular.module('myApp')
  .controller('MyController', ['MY_CONSTANT', 'MY_VALUE', function(MY_CONSTANT, MY_VALUE) {
    var vm = this;
    vm.constantValue = MY_CONSTANT;
    vm.value = MY_VALUE;
  }]);
5. 指令(Directive)的依赖注入
javascript 复制代码
// 定义一个指令并注入依赖项
angular.module('myApp', [])
  .directive('myDirective', ['MyService', function(MyService) {
    return {
      restrict: 'E',
      template: '<div>{{ greeting }}</div>',
      link: function(scope) {
        scope.greeting = MyService.sayHello();
      }
    };
  }]);

5. 什么是AngularJS中的服务?如何创建和使用服务?

答案:服务是AngularJS中用于共享数据和功能的重要组件。它可以是单例对象,也可以是工厂函数返回的对象。在AngularJS中,可以使用模块的provider方法来定义服务,然后通过依赖注入的方式在需要的地方使用它。例如,创建一个数学计算服务,可以在多个控制器中注入并使用这个服务来进行数学运算。

6. 解释一下AngularJS中的路由及其作用。

答案:路由是AngularJS提供的一种机制,用于根据不同的URL加载不同的视图和控制器。它允许开发者在一个应用中定义多个视图,并根据用户的导航操作来切换这些视图。这样可以实现页面之间的无缝跳转和状态管理,提高用户体验。

7. AngularJS中的模块是如何工作的?请简要说明。

答案:模块是AngularJS中组织和打包应用程序代码的主要方式。它允许开发者将相关的组件、指令、服务等组织在一起,形成一个独立的功能单元。模块之间可以相互依赖和引用,从而实现代码的复用和模块化管理。在AngularJS中,使用angular.module方法来定义模块,并使用module方法的配置块来配置模块的运行时行为。

8. 如何实现AngularJS中的表单验证?

答案:AngularJS提供了多种方式来实现表单验证。可以通过在表单控件上使用ng-required、ng-pattern等内置验证指令来实现基本的验证功能。此外,还可以通过自定义验证器来实现更复杂的验证逻辑。当表单提交时,AngularJS会自动收集并验证所有的验证器,如果验证失败则阻止表单的提交。

1. 基本表单验证
javascript 复制代码
<html>
<head>
  <title>Form Validation Example</title>
  &lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"&gt;&lt;/script&gt;
</head>
<body>
  &lt;form name="myForm"&gt;
    &lt;label&gt;Username:&lt;/label&gt;
    &lt;input type="text" name="username" /&gt;
    <span>Username is required.</span>
    
    <br /><br />
    
    &lt;label&gt;Email:&lt;/label&gt;
    &lt;input type="email" name="email" /&gt;
    <span>Enter a valid email.</span>
    
    <br /><br />
    
    &lt;button type="submit"&gt;Submit&lt;/button&gt;
  &lt;/form&gt;

  &lt;script&gt;
    angular.module('myApp', [])
      .controller('MyController', function() {
        this.user = {};
      });
  &lt;/script&gt;
</body>
</html>
2. 自定义验证器
javascript 复制代码
<html>
<head>
  <title>Custom Validator Example</title>
  &lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"&gt;&lt;/script&gt;
</head>
<body>
  &lt;form name="myForm"&gt;
    &lt;label&gt;Username:&lt;/label&gt;
    &lt;input type="text" name="username" /&gt;
    <span>Username is already taken.</span>
    
    <br /><br />
    
    &lt;button type="submit"&gt;Submit&lt;/button&gt;
  &lt;/form&gt;

  &lt;script&gt;
    angular.module('myApp', [])
      .controller('MyController', function() {
        this.user = {};
      })
      .directive('customValidator', function() {
        return {
          require: 'ngModel',
          link: function(scope, element, attrs, ngModel) {
            ngModel.$validators.custom = function(modelValue) {
              var takenUsernames = ['user1', 'user2', 'user3']; // Example list of taken usernames
              return takenUsernames.indexOf(modelValue) === -1;
            };
          }
        };
      });
  &lt;/script&gt;
</body>
</html>
3. 表单提交处理
javascript 复制代码
<html>
<head>
  <title>Form Submission Example</title>
  &lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"&gt;&lt;/script&gt;
</head>
<body>
  &lt;form name="myForm"&gt;
    &lt;label&gt;Username:&lt;/label&gt;
    &lt;input type="text" name="username" /&gt;
    <span>Username is required.</span>
    
    <br /><br />
    
    &lt;label&gt;Email:&lt;/label&gt;
    &lt;input type="email" name="email" /&gt;
    <span>Enter a valid email.</span>
    
    <br /><br />
    
    &lt;button type="submit"&gt;Submit&lt;/button&gt;
  &lt;/form&gt;

  &lt;script&gt;
    angular.module('myApp', [])
      .controller('MyController', function($scope) {
        this.user = {};
        
        this.submitForm = function() {
          if ($scope.myForm.$valid) {
            // Perform form submission logic here, e.g., send data to server
            console.log('Form submitted with user:', this.user);
          } else {
            console.log('Form is invalid');
          }
        };
      });
  &lt;/script&gt;
</body>
</html>

9. 什么是AngularJS中的双向数据绑定?它与单向数据绑定有何区别?

答案:双向数据绑定是指模型和视图之间的数据可以相互同步更新。当模型发生变化时,视图会自动更新;同样地,当用户在视图上输入数据时,模型也会相应地更新。而单向数据绑定则是数据只能从模型流向视图或者从视图流向模型,不能两者兼而有之。

10. 如何优化AngularJS应用程序的性能?

答案:可以从以下几个方面来优化AngularJS应用程序的性能:一是减少DOM操作次数;二是使用One-Time Binding(OTB)来避免不必要的脏检查;三是合理使用$watch来监听数据变化;四是避免在循环中使用复杂表达式;五是使用Track by关键字来优化ng-repeat的性能。

11. AngularJS中的观察者模式是如何工作的?

答案:观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。在AngularJS中,观察者模式主要通过 w a t c h 来实现。当模型发生变化时, watch来实现。当模型发生变化时, watch来实现。当模型发生变化时,watch会通知所有依赖于该模型的观察者进行相应的处理。

12. 解释一下AngularJS中的模板缓存及其作用。

答案:模板缓存是AngularJS提供的一种机制,用于缓存已经编译过的模板。当一个模板被首次编译后,它会被存储在模板缓存中。下次再需要使用这个模板时,可以直接从缓存中获取已经编译好的版本,从而避免了重复编译的过程,提高了性能。

13. 如何在AngularJS中实现懒加载?

答案:懒加载是一种优化技术,它指的是在需要的时候才加载资源或执行操作。在AngularJS中,可以通过路由的懒加载来实现部分模块的延迟加载。这样可以减小初始加载时的体积,提高首屏加载速度。

1.html页面
html 复制代码
<html>
<head>
  <title>AngularJS Lazy Loading Example</title>
  &lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"&gt;&lt;/script&gt;
  &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/angular-route/1.8.2/angular-route.min.js"&gt;&lt;/script&gt;
  &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/oclazyload/1.0.9/ocLazyLoad.min.js"&gt;&lt;/script&gt;
  &lt;script src="app.js"&gt;&lt;/script&gt;
</head>
<body>
  <nav>
    <a href="#/home">Home</a>
    <a href="#/about">About</a>
  </nav>
  <div></div>
</body>
</html>
2.aap.js
javascript 复制代码
var app = angular.module('myApp', ['ngRoute', 'oc.lazyLoad']);
app.config(['$routeProvider', function($routeProvider) {
  $routeProvider
    .when('/home', {
      templateUrl: 'views/home.html',
      controller: 'HomeController'
    })
    .when('/about', {
      templateUrl: 'views/about.html',
      controller: 'AboutController',
      resolve: {
        loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) {
          return $ocLazyLoad.load('js/controllers/aboutController.js');
        }]
      }
    })
    .otherwise({
      redirectTo: '/home'
    });
}]);
app.controller('HomeController', ['$scope', function($scope) {
  $scope.message = 'This is the Home page!';
}]);
3.views/home.html
html 复制代码
<h1>Home Page</h1>
<p>Welcome to the home page!</p>
4.views/about.html
html 复制代码
<h1>About Page</h1>
<p>{{ message }}</p>
5.js/controllers/aboutController.js
javascript 复制代码
app.controller('AboutController', ['$scope', function($scope) {
  $scope.message = 'This is the About page!';
}]);

14. AngularJS中的指令优先级是如何确定的?

答案:AngularJS中的指令优先级是根据指令的定义来确定的。每个指令都有一个优先级数值,数值越大表示优先级越高。当多个指令作用于同一个元素时,优先级高的指令会先执行。可以通过设置指令的priority属性来调整其优先级。

15. 什么是AngularJS中的生命周期钩子?请列举几个常用的钩子及其用途。

答案:生命周期钩子是AngularJS中用于在不同阶段执行特定操作的方法。常用的生命周期钩子包括:onInit在组件初始化时调用;onChanges在组件输入数据变化时调用;doCheck在每次脏检查之前调用;afterContentInit在所有子组件都初始化后调用;onDestroy在组件销毁之前调用。

16. 如何理解AngularJS中的脏检查机制?

答案:脏检查机制是AngularJS用来检测模型数据变化的一种机制。当应用程序中的数据发生变化时,AngularJS会遍历所有的作用域和表达式,检查是否有任何变化发生。如果发现有变化,就会触发相应的监听器函数进行更新。

17. 在AngularJS中如何实现自定义指令?请简要说明步骤。

答案:实现自定义指令的步骤如下:一是定义指令函数;二是创建指令对象并配置相关属性和方法;三是将指令对象注册到模块中;四是在HTML模板中使用自定义指令。

18. 什么是AngularJS中的Promise?它在异步操作中有何作用?

答案:Promise是JavaScript中的一种异步编程解决方案。在AngularJS中,Promise用于处理异步操作的结果。它允许开发者以一种更加优雅和简洁的方式处理异步任务的成功或失败情况。

相关代码:

javascript 复制代码
var resource = resource('/api/posts/:id');
var newPost = new resource({title: 'New Post', content: 'Hello, world!'});
var savePromise = newPost.save();
savePromise.then(function(response) {
    console.log('Post saved successfully!', response);
}).catch(function(error) {
    console.log('Failed to save post!', error);
});

19. 如何测试AngularJS应用程序?有哪些常用的测试工具和方法?

答案:可以使用Karma作为单元测试框架和Jasmine作为断言库来编写单元测试用例;使用Protractor作为端到端测试框架来模拟用户的行为并测试整个应用程序的交互流程。

20. 解释一下AngularJS中的Interceptor及其应用场景。

答案:Interceptor是AngularJS中的一个概念,用于拦截HTTP请求和响应。可以在请求发送之前或响应返回之后对数据进行处理或修改。常见的应用场景包括日志记录、身份验证、错误处理等。

21. AngularJS中的事件传播机制是怎样的?

答案:AngularJS中的事件传播机制主要包括冒泡和捕获两个阶段。当一个事件发生时,它会首先向顶层元素冒泡直到根元素;然后从根元素开始向下捕获直到目标元素。在这个过程中可以根据需要添加事件监听器来处理相应的事件。

22. 如何在AngularJS中实现跨域请求?

答案:由于浏览器的同源策略限制,直接进行跨域请求会受到限制。在AngularJS中,可以通过JSONP(只支持GET请求)或者服务器端代理的方式来实现跨域请求。另外,现代浏览器也提供了CORS(跨域资源共享)机制来支持跨域请求。

23. AngularJS中的过滤器是什么?如何使用它们?

答案:过滤器是AngularJS中用于格式化数据的工具。可以在表达式中使用管道符号"|"来应用过滤器。例如{{ name | uppercase }}可以将name变量的值转换为大写字母形式。

1.HTML部分
html 复制代码
<html>
<head>
  <title>AngularJS Filters Example</title>
</head>
<body>
  <div>
    <h2>Currency Filter:</h2>
    <p>{{ mainCtrl.amount | currency }}</p>
    <h2>Uppercase Filter:</h2>
    <p>{{ mainCtrl.message | uppercase }}</p>
    <h2>OrderBy Filter:</h2>
    <ul>
      <li>{{ item.name }} - {{ item.age }}</li>
    </ul>
    <h2>Custom Range Filter:</h2>
    <p>From 1 to 5: {{ 5 | rangeFilter: 1 }}</p>
  </div>
  &lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"&gt;&lt;/script&gt;
  &lt;script src="app.js"&gt;&lt;/script&gt;
</body>
</html>
2.js部分
javascript 复制代码
var app = angular.module('myApp', []);
app.controller('MainController', function() {
  this.amount = 1234.56;
  this.message = 'Hello, World!';
  this.items = [
    { name: 'John', age: 25 },
    { name: 'Jane', age: 30 },
    { name: 'Bob', age: 20 }
  ];
});
app.filter('rangeFilter', function() {
  return function(start, end) {
    var result = [];
    for (var i = start; i &lt;= end; i++) {
      result.push(i);
    }
    return result;
  };
});

24. 什么是AngularJS中的组件?它与传统的指令有何不同?

答案:组件是AngularJS 1.5及以后版本引入的新概念,它是一种特殊的指令类型。与传统指令相比,组件更加注重封装和复用性。组件有自己的模板、样式和逻辑代码,可以在多个地方重复使用。

25. 在AngularJS中如何实现本地存储?有哪些方法?

答案:可以使用 c o o k i e S t o r e 、 cookieStore、 cookieStore、localStorage或$sessionStorage等内置服务来实现本地存储功能。这些服务提供了基本的增删改查操作接口供开发者使用。

26. 解释一下AngularJS中的Observable及其作用。

答案:Observable是ES6引入的一种数据流概念,在AngularJS中也有类似的实现。它允许开发者以声明式的方式处理异步事件流。通过订阅Observable对象,可以在事件发生时接收到通知并进行相应的处理。

27. 如何确保AngularJS应用程序的安全性?有哪些最佳实践?

答案:为确保安全性,可以采取以下措施:一是对用户输入进行严格的验证和过滤;二是避免XSS(跨站脚本攻击);三是使用HTTPS协议传输敏感信息;四是定期更新依赖库以防止安全漏洞。

28. AngularJS中的深拷贝和浅拷贝有何区别?如何实现深拷贝?

答案:深拷贝是指复制对象时不仅复制其引用的属性值,还会递归地复制所有嵌套的对象;而浅拷贝则只复制对象的第一层属性值。在JavaScript中没有直接的深拷贝方法,但可以通过序列化再反序列化或者手动递归复制的方式实现深拷贝。

29. 什么是AngularJS中的变更检测周期?它是如何工作的?

答案:变更检测周期是AngularJS用来检测模型数据变化的时间间隔。在这个周期内,AngularJS会遍历所有的Watcher对象并检查它们的求值结果是否发生变化。如果发现变化则会触发相应的回调函数进行更新。

30. 在AngularJS项目中如何管理第三方库的依赖关系?

答案:可以使用Bower或NPM等包管理器来管理第三方库的依赖关系。通过配置文件指定项目所需的库及其版本号等信息,然后由包管理器自动下载并安装相应的库文件到项目中。

相关推荐
赔罪18 分钟前
Python 高级特性-迭代
前端·数据库·python
强强学习2 小时前
HTML5 起步
前端·html·html5
念九_ysl4 小时前
前端循环全解析:JS/ES/TS 循环写法与实战示例
前端·javascript·typescript
anyup_前端梦工厂6 小时前
了解几个 HTML 标签属性,实现优化页面加载性能
前端·html
前端御书房6 小时前
前端PDF转图片技术调研实战指南:从踩坑到高可用方案的深度解析
前端·javascript
2301_789169546 小时前
angular中使用animation.css实现翻转展示卡片正反两面效果
前端·css·angular.js
风口上的猪20157 小时前
thingboard告警信息格式美化
java·服务器·前端
程序员黄同学8 小时前
请谈谈 Vue 中的响应式原理,如何实现?
前端·javascript·vue.js
爱编程的小庄8 小时前
web网络安全:SQL 注入攻击
前端·sql·web安全
宁波阿成9 小时前
vue3里组件的v-model:value与v-model的区别
前端·javascript·vue.js