角度编译

时间:2014-05-17 23:58:00

标签: angularjs compilation angularjs-directive

我必须从控制器动态插入指令 该指令应该是这样的

<synergy-chart series="s" options="o"/>

其中s和o是js对象

我从控制器里面想着我能做到这一点 如果指令不需要参数,则此方法有效但由于需要参数

var directive = $('<synergy-chart series="'+series+'" options="'+$scope.widget.options+'"/>');
$compile( directive)( $scope );
$element.find('.panel-body').html(directive);

这显然不是正确的方法

3 个答案:

答案 0 :(得分:0)

您可以将指令放在html文件中并使用ng-show或ng-if来确定是否显示该指令吗?

<synergy-chart ng-show="showDirective" series="s" options="o"/>

如果您在控制器中设置了指令,请使用angular.element代替'$'。

var directive = angular.element('<synergy-chart series="'+series+'" options="'+$scope.widget.options+'"/>');
$compile( directive)( $scope );

答案 1 :(得分:0)

简单如下:

var directive = angular.element('<synergy-chart series="$scope.series" options="$scope.widget.options"/>');

$compile( directive)( $scope );
$element.find('.panel-body').html(directive);

答案 2 :(得分:0)

尝试创建synergyChart指令,隔离范围,可配置属性的绑定表达式以及自定义模板。编译/链接函数的默认行为是将模板作为具有synergyChart指令的元素的子元素插入。

或者,您可以将指令添加到指令中,而不是可配置属性,并使指令从控制器中检索其可配置属性。这样做的好处是允许指令的可配置属性以其他方式设置(即服务,工厂或其他指令)。

<div class="panel-body" synergy-chart="" synergy-chart-series="s" synergy-chart-options="o">
</div>

<script>
      app.directive('synergyChart', function() {
           return {
                restrict: 'A',
                scope: { series: '@synergy-chart-series', options: '=synergy-chart-options' },
                template: '<synergy-chart series="{{series}}" options="{{options}}"/>'
           }
      };
</script>