2016-09-28 102 views
0

我发现的每个答案都涉及使用一个元素并从那里访问$scope

我想访问给定控制器的作用域,最好通过控制器名称,在控制器定义之外的javascript中访问。这甚至有可能吗?


为了清楚起见,我试图更新控制器内$scope上正在监视的变量。我想有一个独立的函数,我可以将一些参数传递给可以为我的应用程序中的众多控制器执行此功能的函数。

如果我正在以完全错误的方式去解决这个问题,请纠正我。刚刚开始进入角度最近。


喜欢的东西:

var myapp = angular.module("myapp", []); 

myapp.controller("myController1", function($scope, $http){ 
    $scope.specialVar = "some value"; 
}); 
myapp.controller("myController2", function($scope, $http){ 
    $scope.specialVar = "some other value"; 
}); 

var myFunction = function(controller, val){ 
    //set the value of specialVar for the passed controller to the passed value 
    myapp.AccessController(controller).$scope('specialVar', val); 
} 
+2

使用服务共享并存储和绑定数据。不是100%清除你正在尝试执行的操作...或者你想要解决的更高级别的问题 – charlietfl

+0

@charlietfl添加了一个示例 –

+0

那么你打算使用那个函数的地方在哪里?在应用程序内?如果是的话,你肯定会使用服务 – charlietfl

回答

3

记住,你可以有任意数量的应用程序中的给定控制器共存的情况下,但只有一个服务;服务是有效的单身。如果你可以假设给定的控制器只有一个实例,那么这听起来像是你将该控制器视为服务,而你应该只是使用该服务。如果你是而不是能够假设只有一个实例,那么你绝对需要通过angular.element(domElement).scope()访问,否则你将很难选择你正在讨论的许多实例中的哪一个。

请记住,如果您不想使用该元素查找范围,则可以始终使用服务和字典/对象将任意键映射到给定范围。

+0

谢谢!对于新手来说,这是一个很好的信息 –