Javascript 传递到函数时角度get attr未定义

Javascript 传递到函数时角度get attr未定义,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,在编译阶段,我可以访问所有attrs元素。那么为什么当我把这个属性传递给函数时,我没有定义呢 以下是代码和plunker: .directive('test', function() { return { restrict:'A', compile: function(ele, attr) { var div = angular.element( '<div ng-show="someCond(attr.some)">directive</d

在编译阶段,我可以访问所有attrs元素。那么为什么当我把这个属性传递给函数时,我没有定义呢

以下是代码和plunker:

.directive('test', function() {
  return {
    restrict:'A',
    compile: function(ele, attr) {

       var div = angular.element( '<div ng-show="someCond(attr.some)">directive</div>' );

       ele.append(div)

       return function(scope, ele, attr) {
         scope.someCond = function(name) {
          console.log(name);
           return name == 'john';

         }
       }

    }
  }
})
指令('test',函数(){ 返回{ 限制:'A', 编译:函数(ele,attr){ var div=angular.element('directive'); 元素附加(div) 返回函数(范围、元素、属性){ scope.someCond=函数(名称){ console.log(名称); 返回名称=='john'; } } } } })

您是否尝试用这些包装所有模块

;(function(window,angular,undefined){
    //code here
})(window,window.angular);

这没什么大不了的,但是闭包是好的:D

attr
对象在
范围内不可用
您可以这样做以使
attr
对象可用:

return function(scope, ele, attr) {
         scope.attr = attr;// look here
         scope.someCond = function(name) {
           console.log(name);
           return name == 'john';
         }
       }

你基本上犯了两个错误

首先,属性需要正确连接,因此此语句必须

var div=angular.element('directive')

其次,html中提供的值应添加在引号内,因此h1应为:

测试

看到我的砰砰声了吗


这只是隔离模块代码和防止第三方代码可能导致的任何错误的最佳实践(抱歉,英语不是我的母语;))谢谢。我选择你的答案是因为我不需要做额外的工作,也不需要像@OXMO456 answer那样将attr分配给作用域。但是为什么我需要这样写一些=“'john'”,当我从链接函数中获得attr时,我可以像some=“that”?那样做,因为
ng show
需要和表达式。因为您需要传递常量表达式
,“
是必需的。如果我们不添加
'
表达式,则表达式期望值来自
$scope.john