首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将$scope传递给服务,看起来是个好主意,但是..?

将$scope传递给服务是AngularJS中的一种常见做法,用于在控制器和服务之间共享数据。然而,这种做法存在一些问题。

首先,将$scope传递给服务会导致控制器和服务之间的耦合性增加。控制器应该专注于处理视图逻辑,而服务应该专注于业务逻辑。通过将$scope传递给服务,服务就可以直接修改控制器中的数据,这破坏了单一职责原则,增加了代码的复杂性和维护成本。

其次,将$scope传递给服务可能会导致性能问题。当$scope中的数据发生变化时,AngularJS会自动更新视图。如果服务直接修改了$scope中的数据,那么AngularJS将会重新计算视图,这可能会导致性能下降,特别是在数据量较大的情况下。

另外,将$scope传递给服务也会限制了服务的可重用性。如果服务依赖于特定的$scope结构,那么它将无法在其他控制器或应用中重用。这违反了软件工程中的DRY原则(Don't Repeat Yourself)。

为了解决这些问题,可以使用AngularJS提供的服务和依赖注入机制。通过将服务作为参数传递给控制器,控制器可以直接调用服务中的方法来获取或修改数据,而不需要将$scope传递给服务。这样可以降低耦合性,提高性能,并增加服务的可重用性。

总结起来,虽然将$scope传递给服务看起来是一个好主意,但实际上会增加代码的复杂性、降低性能和限制服务的可重用性。因此,建议使用AngularJS的服务和依赖注入机制来实现控制器和服务之间的数据共享。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于OIDC实现单点登录SSO、第三方登录

当提供方与使用方能够共享数据库,不必跨网络和安全边界进行交互时,两角色就合并了,完成前两步就能确认当前请求的用户谁,所以只需考虑一问题:【Q1】按照什么流程、格式能够安全可靠地把用户账密从客户端传递给认证服务器...由于资源提供方与资源使用方独立部署的应用,必须跨网络和安全边界进行交互,则需考虑的问题: 【Q3】按照什么流程、格式能够安全可靠地把用户授权决策从资源使用方传递给资源提供方。...OIDC(OpenID Connect)身份认证协议,它规定了一套把用户身份信息从授权服务器(身份提供方)传递给客户机应用(身份使用方)的标准流程、格式。...1 OIDC身份认证协议 OIDC(OpenID Connect)关于如何使用OAuth 2.0的授权服务器为客户机应用提供用户认证服务,并把对应的身份信息传递给客户机应用的标准协议。...OAuth 2.0列举了2种认证机制:Basic认证、POST请求体参(表单认证属于这类),但是不建议使用后者,允许授权服务器自行选择其他认证机制。

6.1K41

前端-ES6中promise的实现原理

美中不足的你得写一堆的.then(function(){},function(){}),但是和回调地狱相比,忍了。在ES7中会有号称是异步的终极解决方案,async和await,那是后话。...promise时,我们用then方法去取结果,而promise就是对象,那么上面的代码看起来应该这样写: function doSomething(){    console.log("a");...onResolved) {    };    fn(resolve); } 为了看起来更直接,这里我们把调用then方法的第一函数就叫做onResolved,那么接下来我们应该考虑在实例化的时候...3秒时间到,第一promise里的resolve被执行了,也就是说拿到了结果,这时候,scope=1,state = “resolved”,deferred保存着刚才进来的那个对象,再次进入handle...下面添加的这段代码在这里也就很清楚了,假如then方法中没有进来的onResolved函数,这里的value直接交给下一then方法中的onResolved函数使用,避免一些无聊的人像这样去调用:

63220
  • 前端自动化部署的深度实践

    npm run build执行构建任务 构建得到的dist文件夹中的内容通过scp传输到服务器,通过版本号区分各个版本。...nginx配置的监听80端口,指向/usr/share/nginx/html/blog_vue_ts,而我通过软连接blog_vue_ts再次指向到upgrade_blog_vue_ts下的版本目录...中调用sh脚本时,只能写字面量参数,变量作为参数好像行不通。...下面这种字面量参数写法可以的,但是就有点呆呆的感觉了,而且与自动化部署的主题不符。...结语 需要承认的,我以上所述的部署流程是以我的个人项目为例说明,可能不是很规范,但是也算是通过自己的理解和摸索,完整地搞了一套部署流程,并没有借用jenkins等工具。

    1.1K31

    关于OAuth2.0 Authorization Code + PKCE flow在原生客户端(Native App)下集成的一点思考

    Password flow的话,那意思需要在我的登录页面里面填写微信的账号和密码,这眼见的不可思议和不合理吧; 我个人看法: 虽然目前OAuth2最佳实践中已经明确要求不能使用这种模式,但是 原有已经使用是这种模式的自有...的客户端,授权服务用的IdentityServer4; 假设授权服务:https://localhost:44356/ 客户端:https://localhost:44357/ A、先判断登录、未登录先引导用户去授权服务器授权...code=的方法把code传递给原生客户端; 2、在本地起HTTP服务器通过http://localhost:port/?...; 总结 有了PKCE, 在Native App中使用Code参的话直接用原先的方式: 1、绑定URL Scheme通过类似app-name://?...code=的方法把code传递给原生客户端; 2、在本地起HTTP服务器通过http://localhost:port/?

    1.2K30

    中学生也能看懂的DRM

    DRM Easy-Tech #015# 在视频服务中,DRM,即数字版权管理(Digital Rights Management),指使用加密技术保护视频内容、通过专业技术安全地存储和传输密钥(加密密钥和解密密钥...在被“劫持”了所有的午饭钱后,Ram冥思苦想,终于让他想到一方法,可以安全地把小纸条传递到Shyam手中。 小纸条上的字换成代码如何? 好主意!...第二天上课的时候,他给Shyam了一张用新代码语言写成的秘密小纸条,纸条在经过好几个同学传递之后到达了Shyam手上。这些同学都很好奇纸条上写了什么,但是没有人能解开密码。...但是你如何密码本安全传递给接收者,而不会落入坏人之手? 一天晚上,Shyam突然灵光一闪,他马上打电话给Ram: Shyma: 如果我们让Hari也加入到纸条传递中来呢?...但是Hari会同意吗? Shyam:我也想到这个问题了。我们每次跟他要密码本的时候,可以给他一块巧克力! Ram:哈,好主意

    55130

    vue $attrs的使用

    $attrs的使用 vue $attrs在vue的2.40版本以上添加的。 项目中有多层组件参可以使用attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。...: false的含义不希望本组件的根元素继承父组件的attribute,同时父组件传过来的属性(没有被子组件的props接收的属性),也不会显示在子组件的dom元素上,但是在组件里可以通过其$attrs...可以获取到没有使用的注册属性, “inheritAttrs: false`不会影响 style 和 class 的绑定 以下$attrs的使用示例(父组件的列表行数据传递给孙子组件展示) 父组件(...="scope"> 传递 ...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站立刻删除。

    1.3K60

    C++|Compiler|活动记录(栈帧)

    (dynamic,和scope不同,比如每次调函数都会创建一新的生命周期) 为了正确地管理一过程的活动,我们需要活动记录存储相关信息。...尽管看起来到头来参数还是要入内存,但是在执行过程中,参数的使用是通过寄存器进行的。...(隐式链表) 类似于对象第一参数隐式this指针,因此类的方法能够访问类的field,但是这个原理又大相径庭,这个其实是建立了一栈帧链表。...如果儿子1调用儿子2,那么事实上儿子1通过父亲访问到的儿子2,因此不能直接儿子1的栈帧,而是先回溯到父亲的栈帧,再把父亲的栈帧指针作为第一参数传递给儿子2....提升(Lambda Lifting) 父函数中每一被子函数(或者孙子、曾孙...)访问的变量作为额外的参数按引用传递给子函数。

    1.2K40

    Python学习笔记之函数参数传递 值还是引用

    看下面示例: a = 1 # a指向内存中一int型对象 a = 2 # 重新赋值 当a重新赋值时,因为原来值为1的对象是不能改变的,所以a会指向一新的int对象,其值为2...更确切的说,list1的第一元素int型,重新赋值时一新的int对象被指定给第一元素,但是对于list1来说,它所指的列表型对象没有变,只是列表的内容(其中一元素)改变了。如下图: ?...因为list对象是可以改变的,函数中使用append在其末尾添加了一元素,list对象的内容发生了改变,但是b和var仍然指向这一list对象,所以变量b的内容也发生了改变。 如下图: ?...那么Python中参数传递值,还是引用呢?准确的回答:都不是。之所以不是值,因为没有产生复制,而且函数拥有与调用者同样的对象。而似乎更像是C++的引用,但是有时却不能改变实参的值。...所以只能这样说:对于不可变的对象,它看起来像C++中的值方式;对于可变对象,它看起来像C++中的按引用传递。 参考

    1.9K30

    利器 | Java 接口自动化测试首选方案:REST Assured 实践 (一)

    在 REST Assured 的官方 GitHub 上有这样一句简短的描述: Java DSL for easy testing of REST services 简约的 REST 服务测试 Java...>test 我们对接口进行测试一般由三步曲:参、发请求、响应结果断言,REST Assured给我们提供了清晰的三步曲,以given、when、then的结构来实现...方法来参,REST Assured 会根据 HTTP 方法自动尝试确定哪种参数类型(即查询或表单参数),如果 GET,则查询参数将自动使用,如果使用 POST,则将使用表单参数; queryParam...\": \"server\",\n" + "\t\"userType\": 1,\n" + "\t\"username\": \"qinzhen\"\n" + "}") 看起来有点丑...,改造一下;rest-assured 为我们提供了一利用 HashMap 来创建json 文件的方法,先把要的字段放入 hashmap 中,然后用 contentType 指明JSON 就可以了,具体写法如下

    98620

    Generative Adversarial Network

    gan_diagram GAN背后的思想你有一生成器和辨别器,它们都处在这样的一博弈中,生成器产生假图像,比如假数据,让它看起来更像真数据,然后辨别器努力辨识该数据真或是假。...所以生成器假数据传递给辨别器,而你真数据传递给辨别器,然后由辨别器判定它是真是假。...gan_network 上图显示了整个网络的样子,这里生成器输入我们的z,它只是一随机向量,一种随机白噪声,我们会将其传入生成器,然后生成器学习如何这个随机向量Z转变为tanh层中的图像,tanh...关于标签,对于真实图像,我们想让辨别器知道它们真的,我们希望标签全部1。为了帮助辨别器更好的泛化,我们要执行一叫做标签平滑的操作,创建一smooth的参数,略小于1。...但是,要让生成器生成的图像与 MNIST 数据集几乎一样,完全可能的。 ? 这来自一篇题为 Improved Techniques for Training GANs 的文章。

    36620

    软件测试|REST Assured 实践

    图片 在 REST Assured 的官方 GitHub 上有这样一句简短的描述: Java DSL for easy testing of REST services 简约的 REST 服务测试 Java...>test 我们对接口进行测试一般由三步曲:参、发请求、响应结果断言,REST Assured给我们提供了清晰的三步曲,以given、when、then的结构来实现...方法来参,REST Assured 会根据 HTTP 方法自动尝试确定哪种参数类型(即查询或表单参数),如果 GET,则查询参数将自动使用,如果使用 POST,则将使用表单参数; queryParam...\": \"server\",\n" + "\t\"userType\": 1,\n" + "\t\"username\": \"qinzhen\"\n" + "}") 看起来有点丑...,改造一下;rest-assured 为我们提供了一利用 HashMap 来创建json 文件的方法,先把要的字段放入 hashmap 中,然后用 contentType 指明JSON 就可以了,具体写法如下

    65430

    angularjs 控制器、作用域、广播详解

    这种实现方式也存在一问题:如果控制器1和控制器2里面有2方法一模一样的怎么办? <!...,但是我们一般不要去这样做,因为很可能会造成作用域的混乱。...神奇的$scope 1.$scope对象; 2.$scope表达式的执行环境(或者叫做作用域)(它是视图和控制器之间的胶水); 3....$scope树形结构,与DOM标签平行; 5.子$scope会继承父$scope上的属性和方法; 6.每个angularJs应用只有一$rootScope,一般位于ng-app上,$rootScope...所有$scope的最上层, ($rootScope也是angularJs中最接近全局作用域的对象,在$rootScope上附加太多业务逻辑并不是好主意,这与污染javaScript的全局作用域一样的

    1.9K51

    【半译】在ASP.NET Core中创建内部使用作用域服务的Quartz.NET宿主服务

    权宜之计 我在上一篇文章中展示的解决方案IServiceProvider注入到您的IJob的文档中,手动创建一范围,并从中检索必要的服务。...主要有以下两主要优点: 我们可以EmailReminderJob注册为范围服务,并直接任何依赖项注入其构造函数中 我们可以将其他横切关注点转移到QuartzJobRunner类中。...作业可以直接使用作用域服务 由于作业实例从IServiceProvder作用域中解析来的,因此您可以在作业实现的构造函数中安全地使用作用域服务。...例如,假设您有一需要更新数据库并将事件发送到消息总线的服务。您可以在每个单独的IJob实现中处理所有这些问题,也可以跨领域的“提交更改”和“调度消息”操作移到QuartzJobRunner中。...,但是在执行的我们请求的IJob之前,我们从DI容器中解析了DbContext和消息总线服务

    1.8K10

    NodeJS错误处理最佳实践

    例如参数是否非空,是否大于零,是不是看起来像个IP地址,等等等。 我该如何处理那些不符合预期的参数?我应该抛出一异常,还是把错误传递给callback。...错误Error的一实例。错误被创建并且直接传递给另一函数或者被抛出。如果一错误被抛出了那么它就变成了一异常[脚注2]。...再说了,如果你觉得这是好主意,你也可以在未来的版本里让函数不那么严格,但是如果你发现由于猜测用户的意图导致了很多恼人的bug,要修复它的时候想保持兼容性就不大可能了。...整个流程看起来这样的: 1.加载配置 1.1 连接数据库 1.1.1 解析数据库服务器的DNS主机名 1.1.2 建立一到数据库服务器的TCP连接 1.1.3 向数据库服务器认证 1.2 发送DB请求...在写新函数的时候,用文档清楚地记录函数预期的参数,包括它们的类型、是否有其它约束(例如必须有效的IP地址),可能会发生的合理的操作失败(例如无法解析主机名,连接服务器失败,所有的服务器端错误),错误怎么传递给调用者的

    1.5K41

    达观数据对AngularJS技术的思考与实践

    进一步系统的划分它的作用和功能: 1.提供了观察者可以监听数据模型的变化 2.可以数据模型的变化通知给整个 App 3.可以进行嵌套,隔离业务功能和数据 4.给表达式提供上下文执行环境 $scope类似于...$rootScope由angularJS加载模块的时候自动创建的,每个模块只会有1rootScope。rootScope创建好会以服务的形式加入到 $injector中。...需要注意的一点,一控制器不应该做太多工作。它应该只包含单个视图的业务逻辑,保持控制器职责单一的最常见做法将那些不属于控制器的工作抽离到服务中,然后通过依赖注入在控制器中使用这些服务。...第三种方式最好的,因为它不必在组件中去主动需找和获取依赖,而是由外界依赖传入。...1)作用域的原型继承:原型继承时对变量的赋值不会修改原型中的值,而是直接在当前scope中创建一同名的属性;但如果变量对象,则不会创建。即基本类型会重新创建变量,引用则不会。 ?

    5.4K150

    编码篇-OC跨多层UI事件传递处理

    前言 在 iOS 中,对象间的交互模式大概有这几种:直接 property 值、delegate、KVO、block、protocol、多态、Target-Action 等等,本文介绍的一种基于 UIResponder..., 第二参数需要传递的参数信息 看起来这样一方法会陷入死循环, 其实不然, 当self.nextResponder向上一直找到UIApplication都还不能响应事件的时候, 系统就会自动丢弃这个事件...nextResponder, 也就是cell, cell没有重写父类方法, 继续事件传递给tableView, tableView也没有重写父类方法, 于是事件处理传递给控制器的view,控制器的view...也没有重写父类方法, 于是事件处理传递给控制器, 控制器重写了父类方法, 于是就走控制器重写的方法, 进行事件处理, 事件就成功地从button传到了控制器....值得注意的,这样的事件传递处理方法,最常见的Bug就是当前试图初始化后确实存在,但是没有加载到父视图上,才导致的方法无法触发。 参考文章

    2.2K30

    vue封装使用公共组件_vue组件封装思路

    propA: Number, // 基础类型检测 (`null` 意思任何类型都可以) propB: [String, Number], // 多种类型 propC: { // 必字符串...,父组件传递给子组件的数据不要直接修改,因为会将父组件中的数据也修改,当这个数据也传入其他组件的时候就会出问题了。...比如:某一公共组件中有两按钮,一“新增”,一“删除”,但是在另外的场景中使用这个组件时,两按钮需要做的事情不一样的,比如是“查看”和“修改”。...固有属性,它的值对应一临时变量 props 而 props 接收从父组件传递给子组件的参数 heads。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站立刻删除。

    1.3K20

    喜大普奔,Gitee最新版本API推出了以gitee作为资源认证服务器的的OAuth2认证

    而国内用户如果没有设置网络翻墙,对于使用 google、github 和 facebook 的账号认证服务并不是很方便。像笔者就只有一github账号,而且还没有创建第三方应用的权限。...参数,且 scope 的值需要和用户上次授权的勾选的一致。...(3) 码云认证服务器通过回调地址{redirect_uri} 用户授权码 传递给 应用服务器 或者直接在 Webview 中跳转到携带 用户授权码的回调地址上,Webview 直接获取code即可...) 注:请求过程建议 client_secret 放在 Body 中值,以保证数据安全 https://gitee.com/oauth/token?...详见:获取Token时服务端响应状态403是什么情况 2. 密码模式 (1) 用户向客户端提供邮箱地址和密码。客户端邮箱地址和密码发给码云认证服务器,并向码云认证服务器请求令牌。( POST请求。

    1.6K20

    Vue3.3 的新功能的体验(下):泛型组件(Generic Component) 与 defineSlots

    泛型的目的和意义 泛型仅仅只是表达啥都行吗?当然不是,因为js原生就支持“泛型”,本来就啥都可以的。 泛型的目的——约束!...泛型相当于制定了一白名单,名单里面的类型可以,不在名单里面的不可以。 TS 的泛型可以帮助我们更准确的推断类型,从而在编写代码的时候,可以有更准确的提示和提供验证依据。...,第二 number[],第三任意类型的数组。...在 setup 里面定义插槽的类型 在组件里面定义两插槽,一匿名插槽,一作用域插槽(col), 定义一 list 的属性,传入一数组,然后遍历这个数组,创建一组列表,列表内使用作用域插槽。... 这里的 default 就是一匿名作用域插槽,可以通过scope.row获得每一行的数据。

    85520
    领券