Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在angular directive(即ng init)r中使用字符串插值中的对象?_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 如何在angular directive(即ng init)r中使用字符串插值中的对象?

Javascript 如何在angular directive(即ng init)r中使用字符串插值中的对象?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个函数,它创建angular元素并通过jquery附加到容器中。我想使用nginit。下面是我的代码 _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>`);

我有一个函数,它创建angular元素并通过jquery附加到容器中。我想使用nginit。下面是我的代码

 _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);

      }
\u createItem=函数(图表){
设item=angular.element(
`
`);
$compile(项目)($scope);
$(“.grid”)。追加(项目);
}

使用上述代码应用程序会生成语法错误

您的代码包含两个问题。首先是如何进行字符串插值。由于
chart
是一个对象,字符串插值机制在执行其工作时会调用其
toString
方法,因此您将得到
(带换行符)而不是您期望的结果。此外,在这种情况下,
ng init
内容不是有效的AngularJS表达式。下一个问题是如何将对象传递到AngularJS模板中。编译后的模板绑定到特定的作用域,因此它只能访问作用域级别的对象。注意你在回答下面的评论中提到的问题,我建议为每个图表创建单独的范围。因此,您必须按如下方式更改代码:

_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);

      }
\u createItems=函数(){
const itemsData=$scope.$ctrl.chartList;
for(设i=0;i

最后,我认为
nginit
在这个特定示例中没有意义,因为
chart
已经在
newScope
中定义了
chart

您的代码会导致什么错误?传递到
\u createItem
函数的
图表
对象是什么?它的结构是什么?请提供更多详细信息错误:语法错误:标记“Object”是意外的,在表达式的第17列预期为[],从[Object]]开始的[chart=[Object Object]]chart是一个将在子级使用的对象,例如
{{chart.title}
\u createItem创建项并通知网格化器(用于网格布局的js库)在我的例子中,我使用for循环创建新项,如下所示<代码>\u createItems=function(){const itemsData=$scope.$ctrl.chartList for(let i=0;i我应该使用ng repeat来代替它,但我需要附加元素,以便gridifier通知有关新元素的信息。如果我使用$scope.chart,它将显示我所有网格中的最后一个图表项。非常感谢@arcquim。你救了我一天。