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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 从内部调用另一个控制器ng repeat_Angularjs_Angularjs Scope_Angularjs Ng Repeat - Fatal编程技术网

Angularjs 从内部调用另一个控制器ng repeat

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

我是angular的新手,我正在尝试从另一个控制器调用函数。我不想在ItemsController中定义调用IssuesController.addIssue或共享服务的addIssue函数,而是直接引用IssuesController。有办法吗

以下是我的示例代码:

<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}