我试图将SharePoint People Picker包装在AngularJS指令中。为了初始化人员选择器,我需要在页面上放置一个div,为其指定一个ID,然后将该ID传递到SharePoint函数中。
我使用这样的基本指令进行此操作:
<sp-people-picker id="test"></sp-people-picker>
但我希望该指令可以在任何地方使用,包括在重复的部分中:
<div ng-repeat="item in dataset">
<sp-people-picker id="test-{{ $index }}"></sp-people-picker>
</div>
这失败了。我逐步检查了一下代码,看看出了什么问题,然后发现当我用“ test-0”愉快地调用SharePoint人员选择器函数时,却找不到该元素。document.getElementById("test-0")
返回null。这样做的原因是,我的div仍然具有id“ test-{{$ index}}”,并且在我的指令编译后才得到“ test-0”。
如何确保我的指令在呈现{{}}之后运行?
(不使用SharePoint进行标记,因为SharePoint只是上下文,它实际上与我要解决的问题无关)
您需要attrs.$observe
在指令链接函数内部使用,其作用与$ watch相同,不同之处在于它可以在{{}}
插值指令上进行监视,您的链接函数将如下所示。每当插值指令被求值时,它将调用函数。
指令(链接功能)
link: function(scope, element, attrs){
attrs.$observe(attrs.id, function(newVal, oldVal){
//here you can get new value & `{{}}` is evaluated.
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句