未来的大问题让我们打破这个问题。我尝试为<label>
实现与原始<input>
类似的行为。我不能嵌套它们所以我使用这样的样式:
<input type="checkbox" id="test" />
Some other content...
<label for="test">Lorem ipsum</label>
在我的情况下,<label>
是自定义指令,<input>
是一个任意元素。它看起来像这样:
<p id="test">Some element...</p>
Some other content...
<custom-directive for="test">My directive</custom-directive>
可悲的是我的id
并不是真的。这是一种表达方式。它看起来像这样:
<p id="test-{{ foo }}">Some element...</p>
Some other content...
<custom-directive for="test-{{ foo }}">My directive</custom-directive>
现在我的问题:在<custom-directive>
内部我希望在for
属性中配置元素。假设foo
"bar"
的{{1}}内置$rootScope
<custom-directive>
,我得foo-bar
。无论我在哪里尝试(在compile
,link
,controller
内,有或没有priority
等)特定元素(此处<p>
)那时仍然test-{{ foo }}
,所以我null
获得了getElementById
。
如果元素包含表达式的id
,我怎样才能将该元素置于指向性之外?
以下是一个示例:http://jsfiddle.net/cd6uooze/
(注意:在我的真实世界应用程序中,这个问题略有不同。即使getElementById
包含表达式,我实际上也可以id
指令中的正确元素。但是这只适用于特定的模板在$templateCache
里面。我无法在JSFiddle中真正解决这个问题,但它与JSFiddle的例子非常相似。)