2016-12-14 41 views
0

我正在访问类名并在控制台中打印它们。这适用于编译,前置,后置,但获取指令控制器的错误。有人可以解决吗?由编译,前,后,但不是由指令控制器返回的类名称

//module declaration 
 
var app = angular.module('myApp',[]); 
 

 
//controller declaration 
 
app.controller('myCtrl',function($scope){ 
 
$scope.name = "Peter"; 
 
}); 
 

 
//app declaration 
 
app.directive('myStudent',function(){ 
 
return{ 
 
\t template: "Hi! Dear!! {{name}}<br/>", 
 
\t compile:function(elem, attr){ 
 
\t \t console.log("compile"); 
 
\t \t return{ 
 
\t \t \t pre:function(scope,elem,attr){ 
 
\t \t \t \t console.log("pre" + attr.class); 
 
\t \t \t }, 
 
\t \t \t post: function(scope,elem,attr){ 
 
\t \t \t \t console.log("post"+ attr.class); 
 
\t \t \t } \t \t \t \t \t 
 
\t \t } 
 
\t }, 
 
\t controller: [function(scope, elem, attr){ 
 
\t \t console.log("controller" + attr.class); 
 
\t }] 
 
} 
 
});
<body ng-app="myApp" ng-controller="myCtrl"> 
 

 
<my-student class="one"></my-student> 
 
<my-student class="two"></my-student> 
 
<my-student class="three"></my-student> 
 
<my-student class="four"></my-student> 
 
<my-student class="five"></my-student> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.min.js"></script> 
 
</body>

+0

什么是你的片段应该显示在运行时?我看起来不像是在任何地方访问'name'。我在输出中的任何地方都看不到“Peter”,而不是显示“{{name}}”的页面或控制台(它只是反复显示“compile”)。 –

+0

评论控制器,你会看到。 – Deadpool

回答

1

这是怎么一回事,因为你会在控制器中得到注射服务。像控制器

  • 您将获得$范围而并非只是范围
  • 您将获得$ ATTRS到位ATTR

的正如你可以看到$范围和$ ATTRS是内置的服务与角。

这样会让你的控制器一样

controller: function($scope, $attrs){ 
     console.log("controller" + $attrs.class); 
    } 

controller: ['$scope','$attrs',function($scope, $attrs){ 
      console.log("controller" + $attrs.class); 
     }] 

请点击此plnkr

+0

参数名称中的更改不会改变任何内容。这与控制器外部指令不同。如果您不确定,请小心小提琴。 – Deadpool

+0

@Deadpool这只是参数名称的变化而已。这是服务的角度写的方式。为了更好的理解..请按照一些关于角度的教程。 –

+0

@Deadpool添加了一个plnkr ...并且控制器是控制器,它们都是相同的。您可以将控制器应用于部分或指令。 –

相关问题