将参数传递给角度指令控制器

时间:2016-12-12 13:58:41

标签: angularjs angular-ui-router

我有一个控制器,它有一些自定义的UI路由器解析params注入:

uxgroups.controller('UXGroupStepCtrl', ['$scope', '$rootScope', '$stateParams', 'stepData', function ($scope, $rootScope, $stateParams, stepData) {

但是当我在我的指令中使用这个控制器时,我得到的错误是stepData未定义:

angular.js:14682 Error: [$injector:unpr] http://errors.angularjs.org/1.5.8/$injector/unpr?p0=stepDataProvider%20%3C-%20stepData%20%3C-%20UXGroupStepCtrl%20%3C-%20UXGroupStepCtrl

是:

Unknown provider: stepDataProvider <- stepData <- UXGroupStepCtrl <- UXGroupStepCtrl

这是指令定义:

app.directive('passProcess', function (stepData) {
    return {
        restrict: 'E',
        controller: 'UXGroupStepCtrl',
        scope: { p: '=' },
        templateUrl: '/App/Modules/UXGroup/Views/process.html'
    };
});

有没有办法在我的指令控制器中解除或定义额外的参数?

2 个答案:

答案 0 :(得分:1)

您无法通过类似指令将数据传递给控制器​​。但控制器的范围与指令相同。所以你可以做的是在指令中设置$ scope变量并在控制器中引用它。

app.directive('passProcess', function (stepData) {
return {
    restrict: 'E',
    controller: 'UXGroupStepCtrl',
    scope: { p: '=' },
    templateUrl: '/App/Modules/UXGroup/Views/process.html'
};
});
uxgroups.controller('UXGroupStepCtrl', ['$scope', '$rootScope', '$stateParams',
 function ($scope, $rootScope, $stateParams) {
    $scope.variable = $scope.p
}

答案 1 :(得分:0)

刚刚发现了另一个问题Injecting resolves into directive controllers 这表明它无法完成,最好的方法是为指令

创建一个单独的控制器