- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
A scope can inherit from a parent scope.
A scope (prototypically) inherits properties from its parent scope.
最佳答案
快速回答 :
子作用域通常原型(prototype)继承自其父作用域,但并非总是如此。此规则的一个异常(exception)是带有 scope: { ... }
的指令——这会创建一个不典型继承的“隔离”范围。在创建“可重用组件”指令时经常使用此构造。
至于细微差别,范围继承通常是直接的……直到您需要在子范围中使用 2 路数据绑定(bind) (即表单元素,ng-model)。如果您尝试从子作用域内部绑定(bind)到父作用域中的 原语 (例如,数字、字符串、 bool 值),则 Ng-repeat、ng-switch 和 ng-include 可能会绊倒您。它不像大多数人期望的那样工作。子作用域拥有自己的属性,可以隐藏/隐藏同名的父属性。您的解决方法是
ng-repeat
、
ng-switch
、
ng-view
、
ng-include
和 0x231414 都涉及到这些新的子作用域时常会出现问题,所以 0x231414s 经常会出现这些问题。 (有关问题的快速说明,请参阅
this example。)
ng-if
的原始绑定(bind)问题。
<input type="text" ng-model="someObj.prop1">
<!--rather than
<input type="text" ng-model="prop1">`
-->
ng-switch
对象显示为具有三个值的单个蓝色对象,而不是具有三个单独的灰色文字的单个蓝色对象。)
childScope.aString === 'parent string'
childScope.anArray[1] === 20
childScope.anObject.property1 === 'parent prop1'
childScope.aFunction() === 'parent output'
childScope.aString = 'child string'
childScope.anArray[1] = '22'
childScope.anObject.property1 = 'child prop1'
childScope.anArray = [100, 555]
childScope.anObject = { name: 'Mark', country: 'USA' }
delete childScope.anArray
childScope.anArray[1] === 22 // true
anArray
、指令 scope: true
transclude: true
。这会创建一个“隔离”范围。 scope: { ... }
。
$scope.myPrimitive = 50;
$scope.myObject = {aNumber: 11};
<script type="text/ng-template" id="/tpl1.html">
<input ng-model="myPrimitive">
</script>
<div ng-include src="'/tpl1.html'"></div>
<script type="text/ng-template" id="/tpl2.html">
<input ng-model="myObject.aNumber">
</script>
<div ng-include src="'/tpl2.html'"></div>
scope: false
作用域属性,该属性隐藏/隐藏同名的父作用域属性。这可能不是您想要/期望的。
<input ng-model="$parent.myPrimitive">
// in the parent scope
$scope.setMyPrimitive = function(value) {
$scope.myPrimitive = value;
}
$scope.myArrayOfPrimitives = [ 11, 22 ];
$scope.myArrayOfObjects = [{num: 101}, {num: 202}]
<ul><li ng-repeat="num in myArrayOfPrimitives">
<input ng-model="num">
</li>
<ul>
<ul><li ng-repeat="obj in myArrayOfObjects">
<input ng-model="obj.num">
</li>
<ul>
childScope = scope.$new(); // child scope prototypically inherits from parent scope
...
childScope[valueIdent] = value; // creates a new childScope property
myPrimitive
)不会
而不是 更改父作用域引用的数组。因此,在上面的第一个 ng-repeat 中,每个子作用域都获得一个独立于 myArrayOfPrimitives 数组的
num
属性:
num
)
是否 更改父作用域引用的对象。所以在上面的第二个 ng-repeat 中,我们有:
obj.num
) - 该指令不会创建新的作用域,因此这里没有继承。这很容易,但也很危险,因为例如,指令可能认为它正在范围内创建一个新属性,而实际上它正在破坏现有属性。这不是编写旨在作为可重用组件的指令的好选择。 scope: false
- 该指令创建一个新的子作用域,该子作用域原型(prototype)继承自父作用域。如果多个指令(在同一个 DOM 元素上)请求一个新的作用域,则只会创建一个新的子作用域。由于我们有“正常”的原型(prototype)继承,这就像 ng-include 和 ng-switch,所以要警惕 2-way 数据绑定(bind)到父作用域原语,以及父作用域属性的子作用域隐藏/阴影。 scope: true
- 该指令创建一个新的隔离/隔离范围。它不典型地继承。这通常是创建可重用组件时的最佳选择,因为指令不会意外读取或修改父作用域。但是,此类指令通常需要访问一些父作用域属性。对象哈希用于在父作用域和隔离作用域之间设置双向绑定(bind)(使用“=”)或单向绑定(bind)(使用“@”)。还有 '&' 可以绑定(bind)到父作用域表达式。因此,这些都创建了从父作用域派生的局部作用域属性。scope: { ... }
,这将不起作用: parentProp
和 <div my-directive>
。必须使用属性来指定指令要绑定(bind)到的每个父属性: scope: { localProp: '@parentProp' }
和 <div my-directive the-Parent-Prop=parentProp>
。scope: { localProp: '@theParentProp' }
引用对象。__proto__
和<my-directive interpolated="{{parentProp1}}" twowayBinding="parentProp2">
此外,假设指令在其链接函数中执行此操作:scope: { interpolatedProp: '@interpolated', twowayBindingProp: '=twowayBinding' }
scope.someIsolateProp = "I'm isolated"
- 该指令创建了一个新的“transcluded”子作用域,其原型(prototype)继承自父作用域。嵌入的和隔离的作用域(如果有)是同级的——每个作用域的 $parent 属性引用相同的父作用域。当一个被嵌入的和一个隔离的作用域都存在时,隔离作用域属性 $$nextSibling 将引用被嵌入的作用域。我不知道嵌入范围的任何细微差别。transclude: true
transclude: true
函数,可用于检查隔离和嵌入范围。请参阅 fiddle 注释中的说明。
showScope()
scope: true
。这不是原型(prototype),但 '='、'@' 和 '&' 提供了一种通过属性访问父作用域属性的机制。 scope: {...}
的指令。这也是正常的原型(prototype)范围继承,但它也是任何隔离范围的同级。 关于javascript - AngularJS 中范围原型(prototype)/原型(prototype)继承的细微差别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14049480/
我使用的是 PHP 5.3 稳定版,有时会遇到非常不一致的行为。据我所知,在继承中,父类(super class)中的所有属性和方法(私有(private)、公共(public)和 protected
所以我一直在努力寻找正确的方法来让应该非常简单的继承发挥作用(以我想要的方式 ;)),但我失败得很惨。考虑一下: class Parent { public String name = "Pare
给定这些类: class Father { public Father getMe() { return this; } } class Child extends Father {
为什么最后打印“I'm a Child Class”。 ? public class Parent { String parentString; public Parent()
我知道有很多类似的问题对此有很多很好的答案。我试着看看经典的继承方法,或者那些闭包方法等。不知何故,我认为它们对我来说或多或少是“hack”方法,因为它并不是 javascript 设计的真正目的。
我已经使用表单继承有一段时间了,但没有对以下方法进行太多研究。只需创建一个新类而不是表单并从现有表单继承并根据需要将所需控件转换为 protected 。 Visual Studio 2010 设计器
我原以为下面的代码片段会产生编译错误,因为派生类不会有我试图在 pub_fun() 中访问的 priv_var。但是它编译了,我得到了下面提到的输出。有人可以解释这背后的理论吗? class base
继承的替代方案有哪些? 最佳答案 Effective Java:优先考虑组合而不是继承。 (这实际上也来自《四人帮》)。 他提出的情况是,如果扩展类没有明确设计为继承,继承可能会导致许多不恰当的副作用
我有2个类别:动物( parent )和狗(动物的“ child ”),当我创建一个 Animal 对象并尝试提醒该动物的名称时,我得到了 undefined ,而不是她的真名。为什么?(抱歉重复发帖
我试图做继承,但没想到this.array会像静态成员一样。我怎样才能让它成为“ protected /公开的”: function A() { this.array = []; } func
在创建在父类中使用的 lambda 时,我试图访问子类方法和字段。代码更容易解释: class Parent { List> processors; private void do
如果我有一个对象,我想从“ super 对象”“继承”方法以确保一致性。它们将是混合变量。 修订 ParentObj = function() { var self = this; t
class Base { int x=1; void show() { System.out.println(x); } } class Chi
目前我正在尝试几种不同的 Javascript 继承方法。我有以下代码: (“借用”自 http://www.kevlindev.com/tutorials/javascript/inheritanc
我在 .popin-foto 元素中打开一个 popin。当我尝试在同一元素中打开子类 popin 时,它不起作用。 代码 这是 parent function Popin(container, ti
我有以下两个类: class MyClass { friend ostream& operatorvalue +=1; return *this; } 现在
有没有办法完全忽略导入到 html 文件中的 header 中的 CSS 文件? 我希望一个页面拥有自己独立的 CSS,而不是从任何其他 CSS 源继承。 最佳答案 您可以在本地样式表中使用 !imp
Douglas Crockford似乎喜欢下面的继承方式: if (typeof Object.create !== 'function') { Object.create = functio
假设我有以下代码: interface ISomeInterface { void DoSomething(); void A(); void B(); } public
class LinkedList{ public: int data; LinkedList *next; }; class NewLinkedList: public Lin
我是一名优秀的程序员,十分优秀!