javascript - 如何在 Angular Directive(指令)(即 ng-init)r 中的字符串插值中使用对象?

标签 javascript angularjs angularjs-directive

我有一个函数,可以创建 Angular 元素并通过 jquery 附加到容器。我想使用 ng-init。按照我的代码进行操作。

 _createItem = function (chart) {

        let item = angular.element(
          `<div class="item col-xs-4 col-sm-4 col-md-4 col-lg-4" ng-init="chart = ${chart}">


        </div>`);

        $compile(item)($scope);
        $(".grid").append(item);

      }

使用上面的代码应用程序会生成语法错误。

最佳答案

您的代码包含两个问题。首先是如何进行字符串插值。自 chart是一个对象,字符串插值机制会调用它的toString方法在完成其工作时,所以你会得到 <div class="item col-xs-4 col-sm-4 col-md-4 col-lg-4" ng-init="chart = [object Object]"></div> (带换行符)而不是您所期望的。而且,在这种情况下ng-init内容不是有效的 AngularJS 表达式。下一个问题是如何将对象传递到 AngularJS 模板中。您编译的模板绑定(bind)到特定范围,因此它只能访问范围级别的对象。注意您在答案下的评论中提到的问题,我建议为每个图表创建单独的范围。因此,您必须按如下方式更改代码:

_createItems = function () {
        const itemsData = $scope.$ctrl.chartList;
        for (let i = 0; i < itemsData.length; i++) {
             let chart = itemsData[i];
             _createItem(chart);
        }
}

_createItem = function (chart) {
        let newScope = $scope.$new(true); // if you need to inherit $scope properties, pass false here
        newScope.chart = chart;

        let item = angular.element(
          `<div class="item col-xs-4 col-sm-4 col-md-4 col-lg-4" ng-init="chart = chart">


        </div>`);

        $compile(item)(newScope);
        $(".grid").append(item);

      }

最后,我认为ng-init在这个特定的例子中没有意义,如 chart已在 newScope 中定义.

关于javascript - 如何在 Angular Directive(指令)(即 ng-init)r 中的字符串插值中使用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52905318/

相关文章:

javascript - 使用 React 测试库在 React 中为表单提交断言 prop 调用

jquery - 更改上下文根后 JSP 页面不工作

javascript - 隔离 Angularjs 自定义指令中的范围 - "="

javascript - AngularJs 指令在更改时获取单选按钮 ng-model 值

angularJS valdr + ui-select 验证

javascript - 如何让php页面从html页面接收ajax帖子

javascript - AngularJS 动态改变 ngMask

javascript - 将动态创建的输入中的值复制到文本区域

javascript - 在 AngularJs Controller 中测试 $scope 并依赖于 $filter

jQuery 在每个嵌入脚本上发送查询字符串