依赖注入的理解
依赖注入(DI)是一种让代码管理其依赖关系的设计模式,目的是为了解耦。
举个例子:假设我们定义了一个方法,在方法里面需要一个对象,我们在此方法内部声明该对象,那么这个对象就和这个方法是永远绑定状态。
用上面的例子来说其实就是在方法内部把对需要的对象的【依赖】控制交给第三方了,第三方负责依赖的创建和存储。这样控制就反转了,由自己转换成第三方了。
如何实现解耦的简单代码:
// 如果不需要依赖注入这样写 function demo(){ const person = new Object({ name: 'test', age: 18 }) // const result = person.age++ return result } demo() // 换成依赖注入方式,这样就可以合person解耦了 function demo1(person) { return person.age++ } const person = new Object({ name: 'test', age: 18 }) demo1(person)
angularjs的依赖注入:
someModule.controller('MyController', ['$scope', 'dep1', 'dep2', function($scope, dep1, dep2) { ... $scope.aMethod = function() { ... } ... }]);
vue2.0的依赖注入:
父组件:
export default { provide: function () { return { getData: this.getData } }, data() { return{} }, methods: { getData(fn) { // 业务代码 fn('传给子组件的值') } } } export default { inject: ['getData'], data() { return{} }, mounted() { this.init() }, methods: { init() { // 业务代码 this.getData((param)=> { // 父组件传过来的值 }) } } }