我可以将变量控制器函数传递给指令中的函数 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 的末尾。
我在 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 的末尾。