Angularjs 如何从控制器中的指令获取范围变量?

Angularjs 如何从控制器中的指令获取范围变量?,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我正在构建一个自定义指令,希望在其中从控制器访问隔离范围变量 以下是html的外观: <display-user-comment userId="user.id"></display-user-comment> app.directive('displayUserComment', function () { return { restrict: 'E', templateUrl: 'user_co

我正在构建一个自定义指令,希望在其中从控制器访问隔离范围变量

以下是html的外观:

<display-user-comment userId="user.id"></display-user-comment>
    app.directive('displayUserComment', function () {
        return {
            restrict: 'E',
            templateUrl: 'user_comment.html',
            scope: {
                userId: '='
            },
            controller: 'UserCommentController as userCmtCtrl'
        };
    })
app.controller('UserCommentController', [
    '$scope',
    function ($scope) {

    //How to get access to userId ??
}]);
以下是我的控制器的外观:

<display-user-comment userId="user.id"></display-user-comment>
    app.directive('displayUserComment', function () {
        return {
            restrict: 'E',
            templateUrl: 'user_comment.html',
            scope: {
                userId: '='
            },
            controller: 'UserCommentController as userCmtCtrl'
        };
    })
app.controller('UserCommentController', [
    '$scope',
    function ($scope) {

    //How to get access to userId ??
}]);
如何在我的控制器中访问隔离变量userId

这是plunker的url
您使用了错误的属性名称。当您为指令属性设置大小写时,它将改为使用破折号(userId=user id)呈现。这是更新的PRUNKR


您使用了错误的属性名称。当您为指令属性设置大小写时,它将改为使用破折号(userId=user id)呈现。这是更新的PRUNKR


将html中的用户id更改为用户id。angular“规范化”属性名,因此html中作为属性名的用户id将成为指令中的scope.userId

有关更多信息:

Angular规范化元素的标记和属性名称,以确定哪些元素与哪些指令匹配。我们通常通过其区分大小写的规范化名称(例如ngModel)引用指令。但是,由于HTML不区分大小写,我们在DOM中以小写形式引用指令,通常在DOM元素(例如ng模型)上使用破折号分隔的属性

规范化过程如下所示:

从元素/属性的前面剥离x和数据。 将以:、-或_分隔的名称转换为camelCase


在html中将userId更改为userId。angular“规范化”属性名,因此html中作为属性名的用户id将成为指令中的scope.userId

有关更多信息:

Angular规范化元素的标记和属性名称,以确定哪些元素与哪些指令匹配。我们通常通过其区分大小写的规范化名称(例如ngModel)引用指令。但是,由于HTML不区分大小写,我们在DOM中以小写形式引用指令,通常在DOM元素(例如ng模型)上使用破折号分隔的属性

规范化过程如下所示:

从元素/属性的前面剥离x和数据。 将以:、-或_分隔的名称转换为camelCase


$scope.user.id
?您正在向指令传递范围变量(
user.id
)。所以它已经在作用域中。@JBNizet,不是,不是,它只是在隔离作用域中,我的控制器在我的指令之前得到实例(这对我来说没有多大意义。指令做什么?如果你不传递用户ID,它如何显示用户评论?请提供一个完整的、可复制的示例。我传递指令,但在我的控制器中,我尝试像$scope.userId、$scope.user.ID……那样获取它,但仍然未定义
$scope.user.ID
?你是pas对指令使用作用域变量(
user.id
),因此它已经在作用域中。@jbniset,不是,不是,它只在隔离作用域中,并且我的控制器在我的指令之前得到实例(这对我来说没有多大意义。该指令的作用是什么?如果不传递用户ID,它如何显示用户评论?请提供一个完整的、可复制的示例。我传递该指令,但在我的控制器中,我尝试像$scope.userId、$scope.user.ID……那样获取它,但仍然未定义。)