Angularjs 在templateUrl中计算属性
我需要在指令的templateUrl函数中读取attr的值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
<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>`
}