问题标签 [angularjs-scope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 使用 ng-include 时失去作用域
我有这个模块路线:
主页 HTML:
partial1
HTML:
HomeCtrl
:
在addLine
函数$scope.lineText
is 中undefined
,这可以通过添加ng-controller="HomeCtrl"
to来解决partial1.html
,但是它会导致控制器被调用两次。我在这里想念什么?
angularjs - AngularJS 控制器中的“this”与 $scope
在AngularJS 主页的“创建组件”部分,有这个例子:
注意select
方法是如何添加到 的$scope
,但addPane
方法是添加到this
. 如果我将其更改为$scope.addPane
,则代码会中断。
该文档说实际上存在差异,但没有提及差异是什么:
以前版本的 Angular(1.0 RC 之前)允许您
this
与该方法互换使用$scope
,但现在不再是这种情况了。在范围上定义的方法内部this
并且$scope
可以互换(角度设置this
为$scope
),但在控制器构造函数内部则不能。
AngularJS 控制器是如何this
工作的?$scope
javascript - 如何在 AngularJS 中进行双向过滤?
AngularJS 可以做的一件有趣的事情是将过滤器应用于特定的数据绑定表达式,这是一种方便的应用方式,例如,模型属性的特定于文化的货币或日期格式。在范围上具有计算属性也很好。问题是这些特性都不适用于双向数据绑定方案——从范围到视图只有单向数据绑定。这似乎是一个非常优秀的图书馆的明显遗漏——或者我错过了什么?
在KnockoutJS中,我可以创建一个读/写计算属性,它允许我指定一对函数,一个被调用以获取属性的值,一个在设置属性时被调用。例如,这使我能够实现文化感知输入 - 让用户键入“$1.24”并将其解析为 ViewModel 中的浮点数,并在输入中反映 ViewModel 中的更改。
我能找到与此类似的最接近的事情是使用This 允许我在属性更改$scope.$watch(propertyName, functionOrNGExpression);
时调用一个函数。$scope
但这并不能解决例如文化感知输入问题。当我尝试在方法本身中修改$watched
属性时,请注意问题:$watch
( http://jsfiddle.net/gyZH8/2/ )
当用户开始输入时,输入元素会变得非常混乱。我通过将属性拆分为两个属性来改进它,一个用于未解析的值,一个用于解析的值:
( http://jsfiddle.net/XkPNv/1/ )
这是对第一个版本的改进,但有点冗长,请注意parsedValue
范围更改的属性仍然存在问题(在第二个输入中键入一些内容,这会parsedValue
直接更改。注意顶部输入没有更新)。这可能发生在控制器操作或从数据服务加载数据中。
有没有更简单的方法来使用 AngularJS 来实现这个场景?我是否缺少文档中的某些功能?
angularjs - 在给定父范围的情况下获取 Angularjs 中的所有子范围
我想知道如何获取给定父范围的所有子范围的列表。我可以从范围的属性中找到 $$childHead、$$childTail、$$nextSibling 和 $$prevSibling。
我现在使用的方法是从父级获取 childHead,然后使用 nextSibling 获取下一个子级,直到 nextSibling 为空。
有更好的方法吗?鉴于我想对所有孩子调用一个方法 [getModel],还有更好的方法吗?
angularjs - AngularJS:在调用 $scope.$apply() 时防止错误 $digest 已经在进行中
我发现自从以 Angular 构建应用程序以来,我越来越需要手动将页面更新到我的范围。
我知道这样做的唯一方法是$apply()
从我的控制器和指令的范围内调用。这样做的问题是它不断向控制台抛出错误,内容如下:
错误:$digest 已经在进行中
有谁知道如何避免此错误或以不同的方式实现相同的目标?
angularjs - 如何使用 AngularJS 访问浏览器控制台中的 $scope 变量?
我想$scope
在 Chrome 的 JavaScript 控制台中访问我的变量。我怎么做?
我在控制台中既看不到$scope
也看不到我的模块名称myapp
作为变量。
angularjs - 无法在指令范围内访问 rootscope var
下面的函数在根作用域中定义了一个变量。
下面指令中的 html 取决于 rootscope 中的一个变量 -
但是上面的代码不起作用。如果我在指令范围内直接定义“按钮”变量,它会起作用。
angularjs - AngularJS指令范围内的'@'和'='有什么区别?
我已经仔细阅读了有关该主题的AngularJS文档,然后摆弄了一个指令。这是小提琴。
以下是一些相关的片段:
从HTML:
/li>从窗格指令:
/li>
有几件事我没有得到:
- 为什么我必须使用
"{{title}}"
with'@'
和"title"
with'='
? - 我也可以直接访问父范围,而不用属性装饰我的元素吗?
- 文档说“通常希望通过表达式将数据从隔离范围传递到父范围”,但这似乎也适用于双向绑定。为什么表达路线会更好?
我发现了另一个显示表达式解决方案的小提琴:http: //jsfiddle.net/maxisam/QrCXh/
angularjs - 为什么格式化程序不适用于隔离范围?
为什么格式化程序不适用于隔离范围?这是角度错误还是我做错了什么?
这包含隔离范围并且不起作用:http: //jsfiddle.net/YbdXQ/56/
这不包含孤立和范围工作正常:http: //jsfiddle.net/YbdXQ/57/
angularjs - 在 AngularJS 中编写指令时,我如何决定是否需要新的作用域、新的子作用域或新的隔离作用域?
我正在寻找一些指导方针,可以用来帮助确定在编写新指令时使用哪种类型的范围。理想情况下,我想要类似于流程图的东西,它引导我完成一堆问题并弹出正确的答案——没有新的新范围、新的子范围或新的隔离范围——但这可能要求太多了。这是我目前的一套微不足道的指导方针:
- 如果将使用指令的元素使用 ng-model,请不要使用隔离范围
请参阅我可以将 ng-model 与隔离范围一起使用吗?以及
为什么格式化程序不适用于隔离范围? - 如果指令不修改任何范围/模型属性,请不要创建新范围
- 如果指令封装了一组 DOM 元素(文档说“复杂的 DOM 结构”)并且指令将用作元素,或者在同一元素上没有其他指令,则隔离范围似乎工作得很好。
我知道在元素上使用具有隔离范围的指令会强制同一元素上的所有其他指令使用相同的(一个)隔离范围,所以这不会严重限制何时可以使用隔离范围吗?
我希望 Angular-UI 团队中的一些人(或其他编写过许多指令的人)可以分享他们的经验。
请不要添加简单地说“为可重用组件使用隔离范围”的答案。