问题标签 [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.

0 投票
1 回答
1017 浏览

rest - AngularJS 控制器/服务/http 通信

我已经将我的 REST API 封装在一个注入控制器的 AnguarJS 服务中。很标准,对。现在我希望该服务拦截任何 401 响应并以某种方式触发注销或重新登录提示或其他内容。问题是:该服务无权访问任何范围。广播该错误的最佳方法是什么?我提出了一些想法,但我是 Angular 的新手,想知道是否有人可以告诉我这样做的“Angular”方式?

1)我可以让服务充当我的 AppCtrl 可以监听的事件池。但这似乎有点过于复杂。所以:

2)我可以将 $rootScope 注入服务,并直接修改服务isLoggedIn。但这似乎完全是错误的。我想明确区分服务服务数据、控制器控制范围以及指令与 dom 混在一起的地方。

3)我的每个控制器都可以监视一个被拒绝的承诺,如果原因是 401 错误,然后到达 $scope 并设置isLoggedIn为 false,但这个选项显然很糟糕。

有什么帮助吗?

谢谢。

0 投票
1 回答
3139 浏览

javascript - 模型更改时未更新角度视图(DOM 元素)

在最新的稳定版 Chrome 中运行最新的稳定版 Angular。我在带有 ng 控制器 A 的视图内的 DOM 元素上进行了 ng-click,但 DOM 元素本身有一个 ng-controller 设置为另一个控制器 B. ng-click 在控制器 B 内触发,但是会更改范围属性, ng-model 属性绑定到哪个 DOM 元素,不会被反映。

具体来说,我有一个 textarea,以及其他 HTML5 输入类型。没有错误,当我在调试器中中断时,我可以查看范围变量并看到 $scope 实际上指向控制器 B。

Plnkr 示例在这里,请注意它如何只更新同一 DIV 内的输入?:http ://plnkr.co/edit/DmccNj?p=preview

0 投票
1 回答
6593 浏览

javascript - 错误:没有控制器:ngModel

当我添加ng-change="reverseOrder=this.checked"到复选框时,如下所示:

我得到以下异常:

我尝试向输入框添加ng-model一个包含整个视图和标签的 div <html>,这会产生如下异常:

这里发生了什么?我认为我不需要明确引入模型。我已经阅读了Angular 文档,但并不明智。

提前致谢。

戴夫

0 投票
3 回答
3623 浏览

angularjs - 在指令中,$watch 触发两次,将 newValue 恢复为原始的 $watch 触发前值

我很确定我做错了什么,因为我对 Angular 的经验很少。可能答案已经在stackoverflow的某个地方,我没有问(谷歌搜索)正确的问题。

我有这个非常简单的指令。它只是一个有四种状态的跨度,我想在每次点击跨度时改变它。每次单击都会将状态向前推进,然后循环返回。每个州都有不同的 CSS 类。我希望每次指令的值更改时父模型上的值都会更改(因此在隔离范围声明中使用“=”,对吗?)。

我对值进行了监视以更改类,以便每次值更改时都会更新css类。

现在,问题是当我单击时,手表会使用 newValue 触发,但随后手表会再次触发 newValue 等于单击前的值。

我认为这与脏检查和与父控制器模型的连接有关,但是,这样做的正确角度方式是什么?和/或有更好、更棱角分明的方式来获得相同的结果?

这里的指令:

这里>>小提琴<<

0 投票
2 回答
786 浏览

javascript - 我可以避免 ng-repeat 循环中的对象变量名吗?

当定义一个 ng-repeat 指令来迭代一个数组时,语法指定ng-repeat="friend in friends",然后在模板中使用 interoplation 运算符,如下所示{{friend.name}}

是否可以将属性分配给当前项目范围,而不是其中的变量?所以我可以打电话{{name}}而不是{{friend.name}}?

原因是我的指令在两个不同模板的范围内使用 - 例如,我可能有一个指令"userActions"既用于转发器,也用于不相关的模板,{{friend.name}} 但没有意义。我想避免人为地制造friend没有语义的对象。


我的用例是这样的:

我有一个渲染各种类型块的网格。一些伪代码:

我还有一个朋友页面,其中包含完全相同的用户操作:

现在,如果我想使用中继器内块的属性,语法是{{block.name}}. 所以模板userActions包含这个。

但是,一旦我在朋友页面中使用了这个模板,我必须{{block.name}}在朋友控制器的范围内创建。但这没有意义,因为块仅存在于块网格的上下文中。我不应该创建这个block

我想要做的只是{{name}}userActions指令模板中调用,因为块范围和控制器都包含它。我不想创建一个对象,然后在我想使用该指令的每个范围内block人为地设置。block.nameuserActions

这是一个jsFiddle 来说明原因

0 投票
1 回答
1028 浏览

javascript - 如何在第一次加载时选择 AngularJS 模型?

我正在使用 AngularJS 来填充选择选项列表。

我默认选择一个选项,具体取决于字段 isMandatory。但问题是我无法在第一次加载时获取所选项目的 ID。

当我更改选项时它会起作用。

请检查此 plunker 代码:http ://plnkr.co/edit/U2dVeo1vwZZPFKVhPleV?p=preview

0 投票
2 回答
12585 浏览

angularjs - 如何从父范围检查包含 ng 的表单的有效性?

我有一个在我的应用程序中的多个视图之间共享的子表单。在一个视图中,此子表单单独显示,底部有一个后退/继续按钮,可将用户引导至下一个子表单。在另一个视图中,子表单与其他子表单(基本上是一个长表单)显示在同一页面上。

由于子表单的 html 在两个视图中都是 100% 相同的,因此我将它分成一个部分并ng-include用于渲染它。在仅显示带有后退/继续按钮的子表单的视图中,我在父 HTML 中呈现后退/继续按钮。

从视觉上看,一切正常,我可以访问在表单 ( user.email, user.password, user.etc...) 中输入的所有数据。

问题是我根据用户是否正确完成表单来启用/禁用“继续”按钮,这在“仅子表单”变体中不起作用,因为父范围似乎没有能够访问表单的状态。如果我将按钮粘贴在部分中,它可以工作,但我不想这样做,因为在使用此部分的每个实例中按钮都不属于那里。

JSFiddle 示例

请注意,在我的示例中,红色边框内的提交按钮被禁用,直到在框中键入内容并且“表单无效?” 值更新,而蓝色边框内的按钮始终处于启用状态并且“表单无效?” 值为空白。

如何myForm.$invalid从父范围访问值?

0 投票
2 回答
4907 浏览

angularjs - 可以使用 $$prevSibling 访问“transcluded”指令中的范围数据吗?

我的指令设置如下:

  • 我正在使用嵌入来确保directiveB得到渲染。
  • directiveA有一个复选框,用于在选中时更改某些值。
  • 此值需要在directiveAanddirectiveB的范围内可访问。

我已经设法做到这一点,但只能通过引用$$prevSibling- 有没有更好的方法?

这是代码: http: //jsfiddle.net/janeklb/yugQf/(在此示例中,单击复选框只是为了“清除”该值)

--

更深入一点:(directiveA被嵌入其中的内容)的“内容”并不总是directiveB. 其他类似directiveB的指令也将在那里结束。“directiveB类型”将始终在directiveA.

0 投票
2 回答
1441 浏览

angularjs - Angular JS:当视图外观相同时,使用 ng-repeat 处理来自每个视图重复的不同 UI 组件

为大标题道歉,我想不出更好的东西。让我解释一下我遇到的问题。

我必须渲染三张卡片,每张卡片都有相同的外观,这意味着它们每个都有一个标题部分和一个正文部分。我正在使用 ng-repeat 从模型中获取数据并渲染这些卡片。

代码:

现在,这些卡片的每一个主体都应该有不同的 UI。例如,一张卡片的 body 可能有一个使用 Hight Charts 的图表,另一张卡片可能只想使用 jQuery UI 库中的 UI,等等。

当我使用 ng-repeat 循环时,我将如何实现它?让我知道我的起始方向是否正确?

模型数据如下所示:

三卡申请

在这方面寻求帮助。

谢谢你。

0 投票
1 回答
13042 浏览

javascript - 在角度指令中从父级继承的新范围

假设我这样做:

如何使该指令的范围从父范围继承变量,但仍使其成为“隔离”范围

例如来自角度文档:

= 或 =attr - 在本地范围属性和通过 attr 属性值定义的 name 的父范围属性之间建立双向绑定。如果未指定 attr 名称,则假定属性名称与本地名称相同。给定范围的widget定义:{localModel:'=myAttr'},那么widget范围属性localModel将在父范围上反映parentModel的值。对 parentModel 的任何更改都将反映在 localModel 中,而对 localModel 的任何更改都将反映在 parentModel 中。

但是在这种情况下,由于“localModel 中的任何更改都将反映在 parentModel 中”,如果我在该指令的范围内修改变量,然后在这种情况下执行 scope.apply(),它将相应地反映在父范围和父模板中将随更改更新

我也尝试将“范围:true”作为参数,但更改了范围,然后是 scope.$apply(); 也将传播到原始范围...

有没有办法让我可以从父范围复制一个范围,并且该范围内的变量仍然有更改不会传播到父范围?