编程语言
首页 > 编程语言> > javascript-将Angular服务中的JSON对象传递给指令

javascript-将Angular服务中的JSON对象传递给指令

作者:互联网

我正在尝试将JSON对象从Angular服务传递给指令.实际上,我只是想随时随地$compile一个指令并将一个对象传递给该指令.

它看起来应该像这样:

var template = '<gmap-info-window layer="layer" marker="marker"></gmap-info-window>',
    content = $compile(template)(searchScope);

而该指令如下所示:

.directive('gmapInfoWindow', [function() {
    scope: {
        marker: '=',
        layer: '='
    },
    link: function(scope, element, attrs) {
        // access objects in attrs
    }
}]);

那不行我在attrs.marker和attrs.layer中获得的只是纯字符串.

现在,我已经尝试并实现的是使用$compile函数的transcludeFn函数.它可行,但是我不认为这是完成我要完成的工作的正确方法.

 var template = '<gmap-info-window></gmap-info-window>',
     content = $compile(template)(searchScope, null, {
         parentBoundTranscludeFn: function() {
              return {
                  marker: _marker,
                  layer: _layer
              };
          }
      });

而该指令如下所示:

.directive('gmapInfoWindow', [function() {
    scope: {},
    link: function(scope, element, attrs, controller, transcludeFn) {
        var objects = transcludeFn();
        // The marker and layer are in objects now!
    }
}]);

我无法想象没有其他方法可以做我想做的事.这看起来有点脏.感谢您的见解!

解决方法:

All I get in the attrs.marker and attrs.layer is plain strings.

您需要了解,根据定义,属性始终是字符串.您不可能在那里有对象. Angular的作用是根据指令的作用域配置在适当的上下文(编译范围)中评估这些属性(字符串)的值.然后,此评估的结果在链接功能的作用域对象中可用.这是您需要使用的:

link: function(scope, element, attrs) {
    console.log(scope.marker, scope.layer);
}

标签:angularjs,angularjs-directive,angularjs-service,json,javascript
来源: https://codeday.me/bug/20191119/2038650.html