Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何将变量从控制器传递到其作用域之外的元素_Angularjs_Angularjs Scope_Angular Ui Router - Fatal编程技术网

Angularjs 如何将变量从控制器传递到其作用域之外的元素

Angularjs 如何将变量从控制器传递到其作用域之外的元素,angularjs,angularjs-scope,angular-ui-router,Angularjs,Angularjs Scope,Angular Ui Router,我的问题最好用模板的布局来解释 <body> <my-directive option1="myVar"></my-directive> <ui-view></ui-view> </body> 正如您所看到的,我有一个ui视图,它将切换具有不同状态的视图/控制器。问题是,这些状态中只有一个在“我的指令”的范围内包含必要的逻辑配置变量。如何将这些变量传递给指令?我试图避免使用$rootScope进行此操

我的问题最好用模板的布局来解释

<body>

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

   <ui-view></ui-view>

</body>


正如您所看到的,我有一个ui视图,它将切换具有不同状态的视图/控制器。问题是,这些状态中只有一个在“我的指令”的范围内包含必要的逻辑配置变量。如何将这些变量传递给指令?我试图避免使用$rootScope进行此操作,但在我看来,它目前是最佳选择。

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

如果您的配置变量在引导时初始化,并且从未更改,则可以使用“常量”

参见:$PROFECT#常数

如果配置变量可能会更改,则可以使用“值”

请参阅:$provide#value

我知道的最后一种方法是使用服务

参见:$provide#service

这篇文章解释了这3种功能之间的区别:

编辑:“如何在视图中直接传递这些解决方案”

一种可能的解决方案是在运行时初始化$rootScope函数,如下所示:

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

请参阅本文:

您的意思是该指令仅在特定状态下显示,还是根据每个状态而改变?更具体地说,该指令是一个标题,其中有一个登录/注销按钮。ui视图有两种状态:一种状态为用户提供项目的显示,而另一种状态将允许用户编辑项目。我只希望登录按钮仅在视图处于视图状态时可见。不管状态如何,标题仍然需要显示,这就是我没有嵌套它的原因。您可以在
指令
模板中执行此操作,
ng if=“$state.current.name===state1”
等。很好,这似乎是一种方式,但本文没有提到如何从模板中引用这些值。。您知道吗?您在指令中定义了控制器吗?它们声明为模块范围?难道没有一个模块范围的对象可以像$root一样引用吗?对我来说,在指令上声明一个控制器以仅获取这些值似乎有点不对劲。