Angularjs 使用属性字符串绑定的指令实现建议
我是AngularJS和指令的新手,正在就我执行的指令寻求一些建议或指导。该指令将用于向用户显示pdf。该指令公开了使用隔离作用域定义的两个属性documentPath和documentType,如下所示:Angularjs 使用属性字符串绑定的指令实现建议,angularjs,directive,Angularjs,Directive,我是AngularJS和指令的新手,正在就我执行的指令寻求一些建议或指导。该指令将用于向用户显示pdf。该指令公开了使用隔离作用域定义的两个属性documentPath和documentType,如下所示: var directiveDefinition = { templateUrl: 'app/views/directives/document.html', scope: { documentPath: '@documentP
var directiveDefinition = {
templateUrl: 'app/views/directives/document.html',
scope: {
documentPath: '@documentPath',
documentType: '@documentType'
},
restrict: 'E',
templateNamespace: 'html',
link: linkFunc
};
在使用该指令的视图中,我使用视图控制器的模型属性和字符串绑定属性
<my-document document-path="{{ application.documentpath }}" document-type="Application"></my-document>
最初运行该命令时,我发现该指令有时会在模型返回数据之前运行。因此将显示一个空文档。其他时候,模型将在指令运行之前加载,因此当链接函数运行时,文档路径将出现,从而允许显示文档
我确定解决这个问题的一种方法是在指令的documentPath属性上使用$watch侦听器。这似乎解决了问题
对于AngularJS和指令实现来说,我的问题是……这是最好的解决方案吗?如有任何建议,将不胜感激。谢谢 这个
$watch
解决方案应该可以正常工作,但这取决于你的应用程序的复杂程度和观察者总数,这可能会导致一个缓慢的$digest
周期
另一个选项是使用“.”点表示法将参数作为引用发送,这样当数据从模型加载时(大多数时候是从API加载的,因为这是比较慢的部分),它将得到更新,而不是发送字符串原语
您的指令范围声明将变成:
scope: {
documentPath: '=',
documentType: '='
},
您将从父视图使用它,如下所示:
<my-document document-path="application.documentpath" document-type="application.documenttype"></my-document>
如果documentType始终相同,您可以将其保留为字符串范围参数。感谢bosch的帮助。接下来的问题是,通过引用传递参数需要$watch,还是该指令将等待运行,直到数据可用?