2016-06-03 3 views
0

Вы можете мне помочь? Я хочу установить имя контроллера, которое содержится в объеме другого контроллера.Имя контроллера из области действия другого контроллера

JS файл:

.controller('PageCtrl', [ 
    '$http', 
    '$scope', 
    '$routeParams', 
    '$location', 
    function($http, $scope, $routeParams, $location){ 

    switch($routeParams.page) { 
     case 'companies': 
     $scope.CurrentPageCtrl = 'CompaniesCtrl'; 
     break; 
     default: 

     break; 
    } 

    }]) 

.directive('myPagecontent', function() { 
    return { 
    template: '<ng-controller ng-controller = "{{CurrentPageCtrl}}"></ng-controller>' 
    }; 
}) 

HTML файл:

<ng-controller ng-controller = "PageCtrl"> 
    <my-pagecontent></my-pagecontent> 
</ng-controller> 

И я получаю ошибку:

angular.js:13642 Error: [ng:areq] Argument '{{CurrentPageCtrl}}' is not a function, got undefined 
+0

Это работало для вас? – tasseKATT

ответ

0

Это может быть немного сложнее, так как ng-controller в этом случае ожидает выражение который вычисляет функцию конструктора контроллера, а не строку, содержащую имя контроллера ,

Один из способов решить это, выполнив следующие действия:

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

    $scope.CurrentPageCtrl = Controller1; 
    } 
]); 

function Controller1($scope) { 

    console.log('Controller1'); 
} 

app.controller('Controller1', Controller1); 

function Controller2($scope) { 

    console.log('Controller2'); 
} 

app.controller('Controller2', Controller2); 

app.directive('myPagecontent', function() { 
    return { 
    template: '<ng-controller ng-controller="CurrentPageCtrl"></ng-controller>' 
    }; 
}); 

Демо:http://plnkr.co/edit/s3yy2fdF5OgBjPcKWikw?p=preview

Альтернативное решение заключается в создании директивы, которая выполняется прежде всего остального, который принимает переменную имя контроллера добавляет ng-controller с правильным значением, а затем удаляет его.

Смежные вопросы