我可以将变量控制器函数传递给指令中的函数 link 吗?

Can I pass variable controller function to a function link in a directive?

我在 angularjs 上使用自定义指令,我想将一些变量传递给指令,以便使用设置的数据构建指令,数据是从 $http 响应中获取的,但这需要很长时间用数据响应填充变量时没有任何反应。

我的想法是,如果我可以在指令内的控制器函数中发出请求,也许我可以设置一个 $timeout 函数直到响应结束,但问题是如果我在 $http 响应中获取数据并用这些数据填充变量 我可以将它传递给 link 函数?

编辑: 最终结果是表单中的一组字段,从 json 对象以动态方式填充它。

通常,如果您有一些信息想要与自定义指令共享 ,您可以通过属性手动执行此操作,或使用 isolate scope.

假设我有一个自定义指令来显示有关 widget 的一些详细信息,但我希望它是通用的...那么我可以这样编写我的指令:

{
   restrict: 'E',
   template: '<div>{{widget.name}}</div>',
   scope: {
      widget:'=' //Allows two way binding with parent scope
   }
}

这是最简单的用例,但这将允许我在我的指令中绑定到该对象并使其完全隔离。

假设我有一个控制器实际上从 `$http' 调用中查找我的小部件,我可以这样指令:

<!-- 
    widget attribute is made available because of how we
    declared our directive definition.
-->
<widget-directive widget="ctrl.myWidget"></widget-directive>

如果您的指令更高级,并且您需要根据对该对象的更改执行一些操作,那么您可以简单地在 link function:

中观察它
link: function(scope, elem, attrs){
   scope.$watch('widget', function(newVal, oldVal){
      // 
      //Do something here now that 'widget' has changed
      //
   });
}

当你必须监视一个对象(深度监视)时,你可以这样声明你的监视:

link: function(scope, elem, attrs){
   scope.$watch(function () { return scope.widget; }, function(newVal, oldVal){
      scope.widget = newVal;
   }, true);
}

注意返回对象的函数,并将 true 添加到 watch 的末尾。