我将自定义范围对象传递给$compile
并创建自定义模板。如果我对模板中的元素应用指令,那么正在改变的范围就是传递给$compile
的范围,而这正是我想要的。
但是,我只是认为在模板中的某些元素上设置控制器可能会很好,
<div ng-controller="controllerName" >
</div>
但ng-controller不会在传递的范围上设置数据,而是创建自己的范围并使用该范围。有没有办法让ngController使用现有范围而不是创建一个新范围?
答案 0 :(得分:1)
我们创建控制器并将它们包装在工厂中以使其可访问。我们通过指令申请或控制(也会离开)。这为您提供了一个控制器,该控制器的范围是指令,它可以更好地控制范围,这适用于我们,因为我们执行此操作的指令通常是组件。
鉴于你现在的道路,我不知道这是不是一个选择。我建议尝试停止使用ng-controller。你现在可能想看看角度2只是为了记住它作为一个迁移路径,它将在不久的将来出现。他们已经删除了ng-controller,他们现在可以在角度2中做很多事情。
这是一个很好的资源,说明为什么这些事情是个坏主意
答案 1 :(得分:0)
如果你看一下source code for 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
}
});
(你可能想给它一个更好的名字)。
请参阅this Plunkr以获得一个演示,该演示显示示波器与外部示波器具有相同的$id
,这意味着示波器的范围相同。