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

时间:2015-01-09 13:52:58

标签: javascript angularjs angularjs-directive

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

我认为如果我可以在指令内的控制器函数中发出请求,也许我可以设置$ timeout函数,直到响应结束,但问题是如果我在$ http响应中得到数据并填写使用这些数据将变量传递给链接函数?

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

2 个答案:

答案 0 :(得分:0)

通常,如果您要使用自定义指令分享某些信息,请通过手动属性或使用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
      //
   });
}

答案 1 :(得分:0)

当您必须观看物体(深度观察)时,您可以像这样声明您的手表:

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

注意返回对象的函数,以及添加到监视结尾的true。

相关问题