Javascript 将带有函数的JSON对象发送到另一个指令';s控制器

Javascript 将带有函数的JSON对象发送到另一个指令';s控制器,javascript,json,angularjs,Javascript,Json,Angularjs,我想将带有函数模板的JSON对象从app.controller发送到另一个指令控制器。我决定将此变量作为内部指令元素的属性发送。问题是我的指令控制器中$attr.valueAtt内的对象是“[object object]”,我无法获取它: 我的代码: var value = ( [{ functionLabel:'Fun', functionTemplate: function(param1,param2){ alert(param1); },

我想将带有函数模板的JSON对象从
app.controller
发送到另一个指令控制器。我决定将此变量作为内部指令元素的属性发送。问题是我的指令控制器中
$attr.valueAtt
内的对象是
“[object object]”
,我无法获取它:

我的代码:

var value = (
  [{
     functionLabel:'Fun', 
     functionTemplate: function(param1,param2){
       alert(param1);
     }, 
     functionParams: ['PARAM1','PARAM2']
  }]);
然后我将其作为指令元素的属性添加到控制器中:

angular.element(document.getElementById('space-for-modals'))
         .append($compile("<modal-dialog visible='true' data-backdrop='static' valueAtt='"+value+"'></<modal-dialog>")($scope));

但是在
$scope.functions
中只有“[object]”。有没有办法将函数模板从一个控制器发送到另一个控制器,以便以后调用它?

问题是,当您执行
valueAtt='“+value+”
时,JavaScript会将
value
转换为字符串,即
“[对象]”
。您需要将对象存储在作用域中,然后在HTML属性中按名称引用它。大概是这样的:

  var scope2 = scope.$new();
  scope2.foo = [{
     label:'Fun', 
     fn: function(param1, param2){
       alert("Callback function says: " + param1)
     }, 
     params: ['PARAM1', 'PARAM2']
  }];

  angular.element(document.getElementById('space-for-modals'))
     .append($compile("<modal-dialog visible='true' data-backdrop='static' value-att='foo'>Modal dialog</<modal-dialog>")(scope2));
在对话框控制器中,您可以访问
函数
成员。请注意,在调用link函数之前,此功能不会准备就绪,因此您需要使用手表:

  $scope.$watch('functions', function(functions) {
    if (functions == null)
      return;
    var ft = functions[0];
    ft.fn.apply(null, ft.params);
  });

我必须说,像这样编译HTML有点奇怪——为什么不在指令声明中使用模板呢?如果这是因为你想把内容放在DOM的另一个级别,考虑使用A来与它通信(基本上,你在一个共享的单体对象上设置一个字段)。此外,您还可以使用,以避免自己绑定属性

服务可以存储由控制器触发的回调函数:

 $scope.functions=  $attrs.valueAtt;
.service('modalService', [function() {
  var proxy = function(message) {
    proxy.callback(message);
  };
  proxy.callback = function() {};
  return proxy;
}])

如果将其同时注入到对话框和触发器控制器中,则可以在它们之间进行通信。模态对话框应使用自己的函数替换回调

Okej我怀疑这是转换问题,但实际上我无法将“value”存储在major$scope中的静态变量中,因为我想用它调用模态窗口,该窗口具有通用功能,依赖于存储在“value”中的函数。这就是我决定将“value”作为属性的原因。是否有其他选项可用于保存视图中的函数的“值”或直接将其提供给指令控制器

请在代码示例中添加空格/换行符/换行符好吗?实际演示如何在scope1上设置obj可能是个好主意。我是一个新的角度,所以可能我错了,但我想这里也有var scope2=scope.$new();是静态的,当我同时收到两个请求以显示来自一个scope2的模式窗口数据时。foo可能会被第二个请求所掩盖,或者我应该为每个模式窗口动态创建单独的scope3 scope4 scope等等?2.隔离作用域的想法看起来很有趣,但我可以像示例中那样动态创建控制器。控制器('NaomiController',['$scope',函数($scope)?还是必须硬编码?1。
scope2=scope。$new()
只是一个例子,因为我不知道您当前从何处获取范围。您可以随心所欲地执行此操作。由于对话框控制器正在监视该数组,如果您将其替换为另一个数组(例如,复制并向其添加项)然后对话框将被更新。2.好吧,它必须是硬编码的。但是你可以把你喜欢的任何东西放入范围中,比如上面所示的函数。我真的认为服务会更好。我将添加另一个演示。
.service('modalService', [function() {
  var proxy = function(message) {
    proxy.callback(message);
  };
  proxy.callback = function() {};
  return proxy;
}])