Angular.js-仅调用多个子控制器/多个控制器之一

失败者编码器

我有一个索引页面,其中定义了两个控制器。我想始终调用一个主控制器(应始终渲染),而仅针对特定的子URL调用调用另一个主控制器。我应该将一个嵌套在另一个中,还是可以使它们彼此独立?我无权更改路由或任何其他内容,只有控制器。现在,当我使用提到的模板(HTML)时,即使url是/ index,它也会调用/提供两个控制器

Only for /index/subPage, I want both controllers to be rendering. 

/index
/index/subPage

HTML:

<div ng-controller="MainCtl" ng-init=initMain()>        
    <p> Within ctller2 {{results}} </p>
</div>


<div ng-controller="Ctller2">       <!-- should not be displayed unless /subPage/mainUrl is rendering -->
    <p> Within ctller2 {{results}} </p>
</div>

JS:

app.controller('MainCtl', ['$scope', '$http', '$location', function ($scope, $http, $location) {

    $http.get('xx/mainUrl').then(function(data) {
        $scope.results = someDataJSON;
        console.log(someDataJSON);
    });

    $scope.initMain = function() {      
            $scope.initMethods();   
    }   
}]); 


app.controller('Ctller2', ['$scope', '$http', '$location', function ($scope, $http, $location) {
 // This controller gets initialized/rendered/called even when xx/mainUrl is called, and when xx/subPage/mainUrl is called too.. 
    $http.get('xx/subPage/mainUrl').then(function(data) {
        $scope.results = someDataJSON;
        console.log(someDataJSON);
    })

    $http.get('xx/subPage').then(function(data) {
        $scope.results = data.data;
        console.log(data);
    })

   angular.element(document).ready(function () {
     alert('Hello from SubCtl, moving over from main controller to here');
    });


}]);

我究竟做错了什么?我是Angular.js的新手

马特·赫伯斯特里特(Matt Herbstritt)

您可以使用来有条件地启动控制器ng-if因此,您可以尝试执行以下操作:

<body ng-controller="MainCtrl">

    <div ng-controller="ctrl1">{{hello}}</div>
    <div ng-controller="ctrl2" ng-if="showCtrl2">{{hello}}</div>

</body>

然后使用以下命令检查当前网址,从而在父控制器中设置变量的值: $location.path()

var app = angular.module('plunker', []);

app.config(function($locationProvider){
    $locationProvider.html5Mode(true); 
});

app.controller('MainCtrl', function($scope, $location) {
  $scope.showCtrl2 = ($location.path() === 'my path');
});

app.controller('ctrl1', function($scope){
  $scope.hello = 'ctrl1 says hello';
});

app.controller('ctrl2', function($scope){
  $scope.hello = 'ctrl2 says hello';
});

但这有点麻烦,对于更大的项目,一个更强大的解决方案将需要使用ui.router

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular.js-装饰控制器

具有多个控制器的Angular JS测试驱动开发

当我在单个页面中使用多个控制器时,Angular JS只有一个控制器在工作

Angular JS控制器范围,多个视图

角js多个或单个控制器?

Angular JS缺少必需的控制器错误:找不到指令所需的控制器“ ngModel”

Angular.js最佳实践-扩展控制器,覆盖控制器默认值

控制器在Angular JS中加载时调用服务

Angular JS-一个控制器中有多个ng-grid:主/详细

在Angular js控制器中调用外部js文件功能

为什么/何时使用多个控制器-Angular.js

使用angular js在单个文件中使用多个控制器

Angular js控制器多次注入

angular js在另一个controllers方法内调用一个控制器的方法

Angular JS无法识别控制器

如何在Angular JS的子控制器中访问父控制器数据

在Angular js中从一个控制器到另一个控制器的调用方法

Angular JS指令特定的控制器和父控制器

跨Angular JS中多个文件的控制器

Angular JS:如何在Angular指令中从控制器的链接内部调用函数

Angular JS部分控制器

Angular.js:如何为所有应用程序控制器一次调用服务

带$ this的单页上的Angular js多个控制器

在控制器中模拟angular js服务调用

如何在Angular JS中的另一个控制器中调用/触发一个控制器功能

实例化angular js控制器

Angular.js:在同一控制器上两次调用工厂

在另一个控制器中调用 angular js 1 一个控制器不工作

Angular JS ng-click 没有被触发,使用多个控制器