2016-03-27 50 views
0

我的问题最好用我的模板布局来解释。如何将变量从控制器传递到其范围外的元素

<body> 

    <my-directive option1="myVar"></my-directive> 

    <ui-view></ui-view> 

</body> 

正如你所看到的,我有一个ui视图,它将切换具有不同状态的视图/控制器。问题是这些状态中只有一个状态在其'my-directive'范围内包含必要的逻辑配置变量。我怎样才能将这些变量传递给指令?我试图避免使用$ rootScope,但目前看来,它是最好的选择。

+0

你的意思是指令应显示只有当在特定的状态或根据每个国家不会修改? – Daniel

+0

更具体的说,该指令是一个包含其他内容的登录/注销按钮。 UI视图有两种状态:一种为用户提供一个项目的显示,而另一种状态则允许用户编辑项目。我只想让登录按钮仅在视图处于视图状态时才可见。不管状态如何,标题仍然需要显示,但这就是为什么我没有嵌套它。 –

+0

你可以在'directive'模板中,'ng-if =“$ state.current.name === state1”'等等...... – Daniel

回答

0

有几种解决方案,这取决于你的配置变量:

如果您配置变量在系统启动初始化并不会改变,你可以使用“常量”。

参见:https://docs.angularjs.org/api/auto/service/ $提供#常

如果你的配置变量可能会改变,你可以使用 “价值观”

参见:https://docs.angularjs.org/api/auto/service/ $提供#值

我知道最后的办法是使用服务

参见:https://docs.angularjs.org/api/auto/service/ $#提供服务

这篇文章解释了这3个功能之间的区别:https://gist.github.com/demisx/9605099

编辑:“如何通过放入系统解决方案直接视图”

一个可能的解决方案是初始化$ rootScope在这样的运行功能:

angular.module('myApp') 
    .run(function ($rootScope, yourConfigurationVariables) { 
     $rootScope.aSpecificNameWichReferenceYourChoice = yourConfigurationVariables; 
    }); 

看到这个职位:Can I directly access module constant from HTML under AngularJS

+0

好极了,这似乎是方法,但文章没有提及如何从你的模板中引用这些值。你碰巧知道吗? –

+0

您是否在您的指令中定义了一个控制器? – Aliz

+0

他们声明模块宽吗?是不是有一个模块广泛的对象,我可以参考像$ root?声明控制器上的指令只是为了得到这些值似乎对我来说有点不合适。 –

相关问题