不使用作用域的AngularJS继承模式

AngularJS Inheritance Patterns without using scope?

本文关键字:AngularJS 继承 模式 作用域      更新时间:2023-09-26

我是angular js的新手,我正在通过各种伟大的链接学习它,其中我遇到的是继承,它显示了如何在angular js中获得继承,但我怀疑的是作者说"因为AngularJS不提供任何使用继承的内置功能,在这篇博文中,我将描述如何将一般的JavaScript继承模式应用到AngularJS组件中。"但是我们在angular中确实有继承的范围,那么他说的第一句话是什么意思?我是不是错过了什么?请解释。

因为AngularJS没有提供任何内置的特性继承

这意味着angular作为一个框架没有任何继承(代码重用)的机制,比如backbone的extend功能。然而,你可能仍然需要从控制器或服务中继承功能,因此本文将向你展示如何在angular框架中使用原生JS来做到这一点。

在angular

中有继承的作用域

是的,作用域确实使用prototypes,但它不是用于共享功能(代码重用),而是用于使子作用域能够访问父作用域的数据,而不需要额外的机制

AngularJs $Scope -在AngularJS中,$Scope是一个被组织成层次结构的对象。有一个根作用域,根作用域有一个或多个子作用域。每个视图都有自己的$scope(它是根作用域的子作用域),所以无论视图控制器在$scope变量上设置了什么变量,这些变量对其他控制器都是不可见的。

Inheritance—继承使您能够创建重用、扩展和修改在其他类中定义的行为的新类。继承其成员的类称为基类,继承这些成员的类称为派生类。派生类只能有一个直接基类。继承是可传递的。如果ClassC从ClassB派生,而ClassB从ClassA派生,则ClassC继承在ClassB和ClassA中声明的成员。

Angular是框架,JavaScript是编程语言,继承是语言特性而不是框架特性。所以从-如何在JavaScript中进行继承开始,它可以在angular(或任何其他框架)中使用,这只是在JavaScript中创建的库。

一些框架在主干中创建了像extend这样的方法,但是extend是在纯js中基于原型继承的方法。这不是魔法。同样的事情也可以在服务、作用域等的angular变量中实现。

Angular中常用的另一个涉及继承的设计范例是创建一个服务。我们可以创建一个服务,我们把它叫做BaseService,就像这样。

this.publicVar = '..'
this.method1 = function() .. 
this.method2 = function() ..
var privateMethod = function() ..
var privateVar = '...';
return this;
and then in another service, inject the BaseService, and then begin by doing
this = Object.create(BaseService);
then you can extend the BaseService in this new service with other methods
this.newServiceMethod = function() ...