Angularjs 使用属性字符串绑定的指令实现建议

Angularjs 使用属性字符串绑定的指令实现建议,angularjs,directive,Angularjs,Directive,我是AngularJS和指令的新手,正在就我执行的指令寻求一些建议或指导。该指令将用于向用户显示pdf。该指令公开了使用隔离作用域定义的两个属性documentPath和documentType,如下所示: var directiveDefinition = { templateUrl: 'app/views/directives/document.html', scope: { documentPath: '@documentP

我是AngularJS和指令的新手,正在就我执行的指令寻求一些建议或指导。该指令将用于向用户显示pdf。该指令公开了使用隔离作用域定义的两个属性documentPath和documentType,如下所示:

    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,还是该指令将等待运行,直到数据可用?