Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从外部JS访问角度模型实例?_Angularjs - Fatal编程技术网

Angularjs 从外部JS访问角度模型实例?

Angularjs 从外部JS访问角度模型实例?,angularjs,Angularjs,My'ProjectsCtrl'包含此函数,用于将新项目添加到父资源: $scope.addProject = function(client){ $scope.client = client; $scope.newProject.client_id = client.id; project = Project.save($scope.newProject); $scope.newProject = {}; } “client”参数取自视图,其中在ng repe

My'ProjectsCtrl'包含此函数,用于将新项目添加到父资源:

$scope.addProject = function(client){
    $scope.client = client;
    $scope.newProject.client_id = client.id;
    project = Project.save($scope.newProject);
    $scope.newProject = {};
}
“client”参数取自视图,其中在
ng repeat=“client in clients”
块中有一个
ng submit=“addProject(client)”

在另一个.js文件中,我试图获取对该客户端实例的引用,以便在使用服务器端事件推送某些数据后更新视图。这是代码:

var pSource = new EventSource('/administration/projects/events');
pSource.addEventListener('projects.create', function(e){
    var project = $.parseJSON(e.data);
    var projectCtrl = angular.element($(".project-list")).scope();

    projectCtrl.$apply(function(){
        projectCtrl.client.projects.push(project);
    });
});
问题是项目总是附加到第一个客户端实例上,而不是传递给
addProject()
函数的客户端实例


如果我做了
client.projects.push(项目)在控制器内,则其工作正常。如何从控制器外部获取对该客户端实例的引用?

方法取决于上下文:

  • 如果您试图从另一个angular controller更新模型,则可以使用angular服务(angular服务在应用程序中基本上是单例的),以便具有相同的模型引用

  • 如果试图从角度范围之外调用方法,可以:

    2.1。将控制器函数引用发布到全局命名空间(不是最佳选择)

    2.2。使用任何事件分派机制并调用$scope.apply(function(){操纵您的模型});关于事件侦听器


  • 最后,我将父资源的$index作为子对象上的模型属性传递,并使用它将其推送到正确的位置

    e、 g


    每当需要在应用程序的不同部分之间绑定数据时……使用服务存储数据,在需要访问的地方注入服务。或者,可以广播包含以下内容的事件:data@charlietfl这难道不会让我面临同样的问题,需要从外部访问模型实例吗?或者我误解了你。这是我第一次尝试Angular。可以将所有数据存储在一个全局数组中,然后将该全局数组传递给Angular。将其他文件中的内容用作角度会更理想service@charlietfl我希望避免更新整个数据集,只更新视图中插入新数据的小区域。我正在尝试实现2.2,但我需要将数据插入嵌套资源,因此我需要对父实例的引用。当我在angular controller(其中客户端是父资源)中设置$scope.client=client时,angular作用域之外的事件侦听器回调无法获取该客户端实例。请尝试以下操作:$scope.addProject=function(client){$scope.apply(function(){$scope.client=client;$scope.newProject.client_id=client.id;project=project.save($scope.newProject);$scope.newProject={};}
    var clientCtrl = angular.element($(".client-list")).scope();
    var project = $.parseJSON(e.data);
    var projectCtrl = angular.element($(".project-list")).scope();
    
    projectCtrl.$apply(function(){
        clientCtrl.clients[project.client_ix].projects.push(project);
    });