阻止控制器创建新的作用域对象
Prevent controller from creating new scope object
我将一个自定义范围对象传递给$compile
并创建一个自定义模板。如果我对模板内的元素应用指令,那么正在更改的范围就是传递给$compile
的范围,这正是我真正想要的。然而,我只是觉得在模板中的一些元素上也有一个控制器,可能是件好事
<div ng-controller="controllerName" >
</div>
但是ng控制器不在传递的作用域上设置数据,而是创建自己的作用域并使用它。有没有办法让ngController使用现有的作用域而不创建新的作用域?
我们创建控制器,并将其封装在工厂中以使其可访问。我们通过指令应用或控制(也会消失)。这为您提供了一个作用域为指令的控制器,它对作用域有更好的控制,这对我们来说很有效,因为我们这样做的指令通常是组件。
考虑到你现在的处境,我不知道这是否是一个选择。我建议尝试停止使用ng控制器。你现在可能想看看angular 2,只是为了记住它是一条迁移路径,它将在不久的将来出现。他们已经移除了ng控制器,他们在角2中所做的很多事情现在都可以完成了。
这是一个很好的资源,说明为什么这些东西是一个坏主意
https://www.youtube.com/watch?v=gNmWybAyBHI&t=9m10s
如果你查看ng-controller
的源代码,你会发现它非常简单:
var ngControllerDirective = [function() {
return {
restrict: 'A',
scope: true,
controller: '@',
priority: 500
};
}];
实际上,您可以创建一个几乎相同的备用指令,只定义scope: false
(或者完全省略scope
密钥,相同):
app.directive('controllerNoScope', function () {
return {
restrict: 'A',
scope: false,
controller: '@',
priority: 500 // same as ng-controller
}
});
(您可能需要给它一个更好的名称)。
请参阅此Plunkr的演示,该演示显示作用域与外部作用域具有相同的$id
,这意味着它是相同的作用域。
相关文章:
- 向Angular作用域对象添加对象数组——TypeError
- 阻止控制器创建新的作用域对象
- 本地作用域对象
- 更新侧自调用函数中的外部作用域对象
- Javascript:替换函数的作用域对象
- 自定义指令中作用域对象内的嵌套对象
- 在作用域对象中定义但不可访问的属性
- 在绑定元素时从作用域对象添加格式
- AngularJs:将作用域对象的属性绑定到指令
- 正在与子指令作用域共享作用域对象
- 如何在显示之前格式化作用域对象中的数据
- 监视包含特殊字符作为关键字的作用域对象
- AngularJS指令没有设置第二级作用域对象
- AngularJS指令访问相同的作用域对象——避免覆盖
- 在Angular应用之外分配作用域对象
- Angularjs的ng-repeat带过滤器作用域对象
- 将作用域对象传递给可以监视和更新它的服务
- 如何将变量求值到局部作用域对象's属性,而不是JavaScript中的全局范围
- 如何在ng类指令中计算作用域对象
- AngularJS在调用rest式服务和作用域对象更新后选择值丢失