Angularjs 在templateUrl中计算属性

Angularjs 在templateUrl中计算属性,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我需要在指令的templateUrl函数中读取attr的值 <my-dirc type="type"></my-dirc> 但是,控制台只返回类型,而不返回类型的值。 我也试过这样做 <my-dirc type="{{type}}"></my-dirc> my-dirc : return { scope : { type : @ }, templateUrl: function(elem, attrs

我需要在指令的templateUrl函数中读取attr的值

<my-dirc type="type"></my-dirc>
但是,控制台只返回类型,而不返回类型的值。 我也试过这样做

<my-dirc type="{{type}}"></my-dirc>
my-dirc :

    return {
    scope : {
      type : @
    },
    templateUrl: function(elem, attrs) {
      console.log(attrs.type);
    }
    }
现在console.log给我{{type}


如何获取type的值?

您不需要在表达式中写入type 试试这个

在templatUrl函数中,您无法访问父函数的作用域。因为在创建控制器作用域之前,首先对template/templateUrl函数求值,这就是为什么在属性中获得原始值的原因。若您在属性内部传递了硬编码值,那个么只有您才能检索该内部函数

此问题只能使用ng include解决


您将根据类型执行什么操作?根据类型,我将返回一个字符串,该字符串将是所需模板的路径。是否要一次性更改模板?或者您想让模板在属性值每次更改时都更改吗?@PankajParkar您绝对不应该通过任何人..templateUrl:'.html'将失败..这显然是我们可以在link函数中获得类型值的事情。。但是没有必要在上面写上$observe。。因为我们已经在使用独立作用域接受它。。虽然这不是OP想要的&它无法解决OPtrue所面临的问题。。这将无助于您无法使用ng include。。。因为这会增加一个范围等级,所以有没有办法使用$interpolate或其他什么?@BhumiSinghal您可以这样做,它需要范围..因为范围在实例中不可用。。templateUrl是编译器首先要计算的内容。。您可以找到类似的@BhumiSinghal may,为什么在定义modelslegacy代码时不遵循点规则呢。。无法改变一切。编译函数能帮上忙吗?
<my-dirc type="{{type}}"></my-dirc>
my-dirc :

    return {
    scope : {
      type : @
    },
    templateUrl: function(elem, attrs) {
      console.log(attrs.type);
    }
    }
<my-dirc type="type"></my-dirc>
return {
  scope : {
  type : '=type'
},
  templateUrl: '.html'

  'link' : function(elem, attrs) {
  attrs.$observe('type', function (obs) {
        console.log(obs);
  })
  } 
}
templateUrl: function(elem, attrs) {
   return '<div ng-include="type? \'template\'+type+\'.html\': \'\'"></div>`
}