javascript - AngularJS - $编译一个带有对象作为属性参数的指令

标签 javascript angularjs angularjs-directive directive

当我使用 $compile 创建和绑定(bind)一个指令时,我怎样才能同时添加一个变量作为属性?变量是一个对象。

var data = {
    name: 'Fred'
};

var dirCode = '<my-directive data-record="data"></my-directive>';

var el = $compile(dirCode)($scope);

$element.append(el);

myDirective 会期望:

...
scope: {
    record: '='
},
...

我试过

 `var dirCode = '<my-directive data-record="' + data + '"></my-directive>';` 

相反。

最佳答案

这很简单,只需创建新范围并在其上设置数据属性即可。

angular.module('app', []);

angular
  .module('app')
  .directive('myDirective', function () {
    return {
      restrict: 'E',
      template: 'record = {{record}}',
      scope: {
        record: '='
      },
      link: function (scope) {
        console.log(scope.record);
      }
    };
  });

angular
  .module('app')
  .directive('example', function ($compile) {
    return {
      restrict: 'E',
      link: function (scope, element) {
        var data = {
          name: 'Fred'
        };
        
        var newScope = scope.$new(true);
        newScope.data = data;

        var dirCode = '<my-directive data-record="data"></my-directive>';

        var el = $compile(dirCode)(newScope);
    
        element.append(el);
      }
    };
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script>

<div ng-app="app">
  <example></example>
</div>

关于javascript - AngularJS - $编译一个带有对象作为属性参数的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37420381/

相关文章:

javascript - 在将范围变量传递给 ng-show 之前如何评估范围变量

javascript - 通过 attrs.val 或 attrs.$set(attname, val) 访问属性

angularjs - 在angular js项目中强制更新html5视频源

javascript - Angular Controller 调用指令上的函数是 'bad practice' 吗?

javascript - 与奥蕾莉亚的传承

javascript - 如何在屏幕上将对象分组到网络中?

javascript - 改变 Angular 的方向

javascript - 从 Angular 调用节点

javascript - Zapier - 如何将 inputData 与数组一起使用

javascript - HTML & JS 无限后台循环