首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安古拉杰:$scope与scope

安古拉杰:$scope与scope
EN

Stack Overflow用户
提问于 2013-10-10 06:29:13
回答 5查看 19.5K关注 0票数 37

在Angularjs中,在控制器中使用$scope和在指令链接函数中使用scope (没有"$")是否有特定的原因?只是个会议还是别的什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-10 06:58:40

在控制器中执行$scope时,依赖项注入将基于匹配变量名$scope注入作用域,在这种情况下,使用scope作为名称是行不通的。

对于指令的情况,注入是基于位置的,因此您可以将变量命名为ab或任何东西。链接函数的指令顺序是

(scope, iElement, iAttrs, controller)

所以第一个元素总是作用域对象。

票数 29
EN

Stack Overflow用户

发布于 2017-11-07 01:39:52

模块工厂方法,如控制器、指令、工厂、筛选器、服务、动画、配置和通过依赖项注入(DI)运行接收参数。对于DI,您可以向范围对象注入美元前缀,即$scope。原因是注入的参数必须与可注入对象的名称(后面跟着美元($)前缀)匹配。

例如,,您可以将作用域和元素对象注入控制器,如下所示:

代码语言:javascript
复制
module.controller('MyController', function ($scope, $element) { // injected arguments });

当指令链接器函数等方法无法通过依赖项注入接收参数时,只需传递作用域对象,而不使用美元前缀,即作用域。原因是调用方接收到传递的参数。

代码语言:javascript
复制
module.directive('myDirective', function () // injected arguments here 
{ 
    return { 
         // linker function does not use dependency injection 
         link: function (scope, el, attrs) { 
            // the calling function will passes the three arguments to the linker: scope, element and attributes, in the same order 
         } 
    }; 
});

简而言之,在依赖注入的情况下,作用域对象被接收为$scope,而在非依赖注入的情况下,作用域对象被接收为作用域或任何名称。

票数 2
EN

Stack Overflow用户

发布于 2015-07-01 14:28:36

这种行为的原因是,与控制器不同,指令不使用依赖注入,而是传递放置在视图后面的控制器创建的作用域。这非常棘手,因此您可以在不同的作用域上重用您的指令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19288586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档