Angularjs 从内部调用另一个控制器ng repeat
我是angular的新手,我正在尝试从另一个控制器调用函数。我不想在ItemsController中定义调用IssuesController.addIssue或共享服务的addIssue函数,而是直接引用IssuesController。有办法吗 以下是我的示例代码:Angularjs 从内部调用另一个控制器ng repeat,angularjs,angularjs-scope,angularjs-ng-repeat,Angularjs,Angularjs Scope,Angularjs Ng Repeat,我是angular的新手,我正在尝试从另一个控制器调用函数。我不想在ItemsController中定义调用IssuesController.addIssue或共享服务的addIssue函数,而是直接引用IssuesController。有办法吗 以下是我的示例代码: <div ng-controller="ItemsController"> <ul ng-repeat="item in items"> <li><a href n
<div ng-controller="ItemsController">
<ul ng-repeat="item in items">
<li><a href ng-click="addIssue(item)">{{item.name}}</a></li>
</ul>
</div>
<div ng-controller="IssuesController">
<ul ng-repeat="issue in issues">
<li>{{issue.name}}</li>
</ul>
</div>
<script>
angular.module('app').controller("IssuesController", function () {
$scope.issues = [];
$scope.addIssue = function (item) {
// Add Issue
}
});
</script>
- {{issue.name}
角度.模块('app')。控制器('issuecontroller',函数(){
$scope.issues=[];
$scope.addIssue=功能(项){
//添加问题
}
});
更新:
如果我有第三基控制器来帮助他们共享$scope,那该怎么办
<div ng-controller="OrdersController">
<div ng-controller="ItemsController">
<ul ng-repeat="item in items">
<li><a href ng-click="addIssue(item)">{{item.name}}</a></li>
</ul>
</div>
<div ng-controller="IssuesController">
<ul ng-repeat="issue in issues">
<li>{{issue.name}}</li>
</ul>
</div>
</div>
- {{issue.name}
有,但这是一个非常糟糕的想法,你应该仔细考虑一下。更好的解决方案是将该功能放入父控制器中。很明显,您拥有的功能范围(双关语)要比使用issuecontroller
的div大得多
如果您的代码是真实的示例,那么那里甚至没有使用addIssue()
。所以把它放在那里是没有意义的
直接访问附加问题的一种方法是:
angular.element(/*select your div*/).scope().addIssue(item);
您选择div的方式取决于。如果我有一个
id
,你可以使用它。如果使用jQuery,那么可以使用[ng controller=ItemsController]
为什么不嵌套控制器?您可以在以下位置阅读范围继承示例:
然后,IssuesController将继承$scope,您将能够使用该功能。正如EliteOctagon所述,有其他可能更多的“最佳实践”方法来实现您的目标,但您可以始终以“肮脏”的方式来实现这一点,您可以在ItemsController中使用来调用
附加问题(item)IssuesController上的
函数,由于所有其他作用域都是$rootScope的子作用域,您可以在任何控制器中使用它
示例:如果我理解正确,您想从另一个控制器调用控制器吗?看到这一点:我喜欢这个解决方案,即使它是“脏的”,我知道这有点旧,但您可能想看看如何执行
$rootScope.$emit('addisseevent',item)项目控制器和问题控制器中的代码>$rootScope.$on('addIssueEvent',函数(项目){/*do stuff*/})代码>通过这种方式,您将维护非耦合控制器我在另一个答案中看到了这一点,但我同意这是一个糟糕的想法。我不想嵌套它们,因为它们没有太多的关联。
<div ng-controller="ItemsController">
<ul ng-repeat="item in items">
<li><a href ng-click="addIssue(item)">{{item.name}}</a></li>
</ul>
<div ng-controller="IssuesController"> <!-- nested and will inherit scope -->
<ul ng-repeat="issue in issues">
<li>{{issue.name}}</li>
</ul>
</div>
</div>
$scope.addIssue = function() {do something}