- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在向并非我自己编写的 Web 应用程序添加功能。感觉不能加刷卡功能。
我在某处看到“无法在工厂中访问 $scope”,但我以某种方式设法将 ng-repeat 创建的所有范围存储在工厂中。由于 JavaScript 按值传递,我可能不是在“存储范围”,但如果我在工厂内设置范围 ng-class 我仍然可以清楚地看到差异。我认为这是个好主意,因为范围遍历很痛苦。我是挖到了金子还是浪费了速度和空间来存储范围内的海量数据?
HTML
main.html
<div ng-controller="someCtrlWhichWasDeclaredALongTimeAgo">
.
.
.
<div class="items-container"
ui-sortable="sortableOptions"
ng-model="selectedSession.items">
<div ng-repeat="item in selectedSession.items"
ng-controller="itemEditorCtrl"
ng-class="{'item-last':$last}">
<div ng-if="item._value !== undefined"
class="item inline-comment">
<span class="handle"></span>
</div>
<div ng-if="item._value === undefined"
class="item"
ng-include="'/views/item-editor.html'"></div>
</div>
</div>
<div class="stopper"></div>
</div>
</div>
项目编辑器.html
<div item-editor
swipe-function="swipeMe"
ng-swipe-left="swipeLeft(item)"
ng-swipe-right="swipeRight(item)">
...
</div>
这将使用我的魔术代码呈现一个列表。如果单击列表中的项目,它将扩展到全屏。您应该能够从那里在项目之间滑动。
我不认为我需要张贴更多的 HTML 来解释这个问题。我确实设法通过 $rootScope.$broadcast 实现了滑动,但是如果我的列表中有一百个项目怎么办?随着越来越多的项目接收消息并处理它们,它不会变得更慢吗?我宁愿在选择此 session 时将所有范围加载到一个工厂中,然后在取消选择 session 时将其删除。启动可能需要一些时间,但刷卡不需要 5 分钟。
最佳答案
你所做的一切都很好。您可以随意在您的应用程序周围传递范围对象。请记住它们代表什么。 $scope
对象是您与 View 的接口(interface)。大多数时候,您的服务与 View 关系不大,理想情况下应该用于在 Controller 和指令之间共享数据。也就是说,有几个例子表明服务间接影响 View 是完全有意义的。比如我们写了一个spinner service这允许微调器指令在服务中注册自己。
spinner 指令将 spinnerService
注入(inject)其中,调用 spinnerService.register
函数并传入其隔离范围,以便服务可以跟踪它并使用它来打开和关闭微调器。然后我们的开发人员可以在他们需要的任何地方注入(inject)服务,并在需要时隐藏/显示加载微调器或微调器组。
“无法在工厂中访问 $scope”的意思是您不能在工厂内注入(inject) $scope
。 $scope
绑定(bind)到 DOM 元素(调用 Controller 或隔离指令的元素),因此将新的 $scope
注入(inject)工厂没有多大意义事实上是不可能的。你不能做 app.factory('myFactory', function ($scope) { ... });
但你绝对可以从 Controller 或指令调用你的工厂/服务并传递范围将对象从那里转化为您在服务中提供的方法。
只要您知道自己在做什么,在服务内跟踪范围就没有错。人们会告诉您不能将您的作用域传递给服务,因为它是一种反模式,但随后他们会建议将类似这样的内容放入您的指令/ Controller 中,然后将其传递给服务:
var api = {
hideSpinner: function () {
$scope.show = false;
},
showSpinner: function () {
$scope.show = true;
}
};
当然,您不是直接将您的 $scope
对象传递给服务,但是如果参数是您的范围对象可能会卡在内存中并且永远不会成为垃圾收集,此解决方案也无济于事。您构建和传递的 API 对象带有它的 JavaScript 范围链,将所有变量保存在它定义的范围内,包括您的 Controller /指令的 $scope
。必须这样做,否则那些 API 方法将无法工作。您的 $scope
是该组件的一种 API,以这种方式使用它很好。
执行上述示例的一个更好的论据是,您的 $scope
对象可能包含您不需要/不想与服务共享的信息或功能。用你想暴露给服务的东西制作一个小的 API 对象是非常有意义的。然后你的服务只能访问你希望它访问的东西,并且仍然可以影响 Controller /指令 $scope
,但只能以你传入的 API 对象概述的方式。
关于angularjs - 在工厂中存储 $scopes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30741569/
是否有在非 AngularJS 页面内初始化 AngularJS 应用程序的最佳实践方法?我正在向现有网页添加新功能,需要传入一个参数。具体来说,有一组选项卡,一个新选项卡将启动一个 Angular
找不到这两者之间的区别。 保留其中任何一个来引导我的 Angular 应用程序是否有意义? angular.bootstrap(document,['myApp']); 或者 angularAMD.b
我试图理解 Packpub 的书附带的示例 AngularJS 应用程序。 app.js文件在 client/src/app 下定义文件夹,它的模块定义看起来像 angular.module('app
Angularjs 具有用于表单验证和显示错误消息的强大基础设施。但是,我处于必须在特定场景中向用户显示警告消息的情况。这是我的简单表格的图表 该表单在两个字段上都应用了必需和模式验证。除了此验证之外
我在重试功能正常工作时遇到了一些麻烦,希望能获得一些帮助。我有一个要调用的$ resource,直到出现成功情况或超过最大重试次数为止。 我似乎遇到的问题是,在我的重试函数中,我正在调用另一个prom
我目前正在开发一个 AngularJS 应用程序,我遇到了以下障碍。 当用户提交时,我们有一个 login 页面,我们调用一个 web api 并对用户进行身份验证,我们目前正在使用 claims 身
当范围更新时,指令的属性不会改变,它们仍然保持初始值。我在这里缺少什么? HTML works great works: {{foo}} Javascript (基于首页上的 A
我正在使用 Zurb 的 Foundation 框架修改应用程序以实现响应性和 AngularJS。存在数据显示在带有 ... 的表中的错误有 是根据 Foundation 的响应规则隐藏/显示的。不
在过去的三天里,我一直在搜寻互联网,试图弄清楚当angular注意到div的宽度发生变化时如何使指令运行。 我不断看到相同的示例,说明如何实现此目标,但是它们对我不起作用,我也不知道为什么。 我回到一
我正在使用以下代码尝试汇总 在 Angular ,这在整个作品中,但是小于 0.5 的数字四舍五入为 0。我想 向上取整 每个数字到下一个整数。例如 0.02 应四舍五入为 1 {{((data.Vi
我目前正在尝试以一种能够适当扩展到企业级别的方式来组织我的 Angular 应用程序。但是我发现似乎过度依赖框架内的命名约定,并且试图避免命名冲突是一个真正的问题。 例如,当定义任何 constant
我正在阅读 AngularJS 基础知识,并且喜欢在我的页面中使用它的绑定(bind)功能。所以我可以定义可以在 View 中显示的数据,可以对数据进行更改,以便在 View 中更改它而无需担心。 在
在父 Controller 范围内,我定义了 selectedItem设置为“x”。然后在子范围内,我定义了selectedItem使用 ngModel:
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
如果2个条件为真,我试图将一个特定的类应用于li元素,因此我编写了以下代码,但似乎无法正常工作 ng-class="{current:isActive('/'), loginStatus: false
请看看朋克。 http://plnkr.co/edit/DuTFYbLVbPkCIvRznYjG?p=preview ng-pattern regEx不适用于输入文本字段。 仅在需要验证的情况下才能正
我正在为iOS + Android构建AngularJS(1.x)和Ionic/Cordova移动应用程序。我想在登录页面上添加/创建“深层链接”,以便在我向新用户发送“确认您的电子邮件”电子邮件时,
angularjs 中服务(或工厂)的生命周期是什么,何时重新初始化? 最佳答案 当 Angular 启动时,它会将服务的构造函数附加到关联的模块上。这种情况发生一次。 angular .modu
我对 Angular 很陌生,所以希望我知道的足够多,可以问什么似乎是合理的设计问题。 我正在通过 Angular 绘制一些数据,并且正在使用 $resource。在将 Angular 引入项目之前,
我需要在我的 angular-breeze 应用程序中使用国家/地区下拉菜单,我尝试了以下操作: https://github.com/banafederico/angularjs-country-s
我是一名优秀的程序员,十分优秀!