2016-05-17 95 views
0

我有一个关于角范围的一个基本问题(这可能是之前回答,但我不能找到一个解决方案):更新控制器范围NG-包括/ NG-重复

在我的应用程序的观点是多NG-包括与其他形成子范围的角元素(例如ng重复)一起使用。我想在一个控制器中管理它们,但在ng-include模板中,我必须使用$ parent.variable_name来访问/更改控制器中的变量。在ng-include中的ng-repeat内部,我必须使用$ parent。$ parent.variable_name来访问/更改它。这很容易让人困惑,因为很难说,子范围有多深。

有没有更好的方法来引用子视图中的控制器变量和函数?

+0

在控制器之间共享数据的最佳方式是使用服务/工厂。 – DevTrong

+0

你可以使用指令! –

+0

当我只使用一个控制器时,我该如何做到这一点?我有一个主控制器 - 无ng-include,ng-repeat等子控制器。 对不起,我有点新的角 – jacksbox

回答

0

创建一个服务/工厂(服务/工厂是单身人士)。

angular.module('moduleName') 
    .factory('factoryName', function() { 
    return { 
     variableName: 1 
    }; 
    }); 

然后去在你的控制器(您可以在所有其他控制器使用它),并使用工厂。

angular.module('moduleName') 
    .controller('controllerName', function($scope, factoryName) { 
    $scope.data = factoryName; 
    }); 

然后在您的HTML中,您可以简单地绑定它。

<div ng-controller="controllerName"> 
    {{ data.variableName }} 
</div> 

没有测试过寿。但它应该工作:)

+0

所以用这种方法(和你的例子),我必须为每个ng-include和ng-repeat设置ng-controller到“controllerName”? – jacksbox

+0

我想你有一个子控制器(或更多的子控制器)。只需在你的子控制器中使用工厂,你就可以访问该变量。你有一个示例代码? – DevTrong

+0

不需要知道,如果你喜欢我可以做一个jsfiddle,但那需要一段时间。想象一下,我有一个控制器“mainCtrl”,它处理视图的一部分。在这个视图中,有两种形式,它们都通过ng-include包含在内。现在“mainCtrl”应该从表单中获取ng-models,但是我必须用$ parent来引用它们。$ parent.modelname ... – jacksbox