2015-02-08 123 views
0

我正在构建一个自定义指令,我想从我的控制器访问隔离的作用域变量。如何从控制器中的指令获取范围变量?

下面是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 ?? 
}]); 

如何访问我的控制器中的隔离变量userId?

这里是plunker网址 http://plnkr.co/edit/9Lh9sPp8o7gZLs1h8RDs?p=preview

+1

'$ scope.user.id'?您将范围变量('user.id')传递给指令。所以它已经在范围内。 – 2015-02-08 19:20:53

+0

@JBNizet,不是它,它只是在隔离范围内,我的控制器在我的指令之前得到了实例( – 2015-02-08 19:28:11

+0

这对我没有多大意义。指令是干什么的?它如何显示用户注释如果你不通过它的用户ID?请提供一个完整的,可重复的例子 – 2015-02-08 19:30:34

回答

2

将userId更改为html中的user-id。角度“标准化”属性名称,因此user-id作为html中的属性名称在您的指令中变为scope.userId。

欲了解更多信息https://docs.angularjs.org/guide/directive

角正常化元素的标签和属性的名称,以确定哪些元素匹配该指令。我们通常通过其区分大小写的camelCase规范化名称(例如,ngModel)来引用指令。但是,由于HTML不区分大小写,所以我们通过小写形式引用DOM中的指令,通常在DOM元素上使用以短划线定界的属性(例如ng-model)。

归一化处理是如下:

地带x和从元件/属性的前DATA-。 将:, - 或_分隔名称转换为camelCase。