[英]Unable to interpolate an array which is inside of an object property
This is just a Sample Code this is my .js file 这只是一个示例代码,这是我的.js文件
SCPApp
.directive('scocurepeater', ['$sce', '$compile', '$timeout','$interpolate',
function ($sce, $compile, $timeout, $interpolate) {
return {
restrict: 'A',
replace: true,
scope: {
htmlstring: "=",
columns: "=",
inputdata: "=",
inputClass: "@"
},
templateUrl: '/{{currentAppId}}/../Scripts/app/shared/directives/dynamic_render/repeater/partials/repeater.html',
link: function (scope, element, attr, $compile) {
//
scope.rarray = [{
"firstname": "employee1", "lastname": "last1", "department": "Dept1", "testdata": [{ "col1": "column11", "col2": "column12" },
{ "col1": "column21", "col2": "column21" }]
},
{ "firstname": "employee2", "lastname": "last2", "department": "Dept2" },
{ "firstname": "employee3", "lastname": "last3", "department": "Dept3" },
{ "firstname": "employee4", "lastname": "last4", "department": "Dept4" }];
scope.htmlstring = "<div class='wrapper'><div class='left-wrapper'><img src='http://betanews.com/wp-content/uploads/2014/05/Enterprise-apps.jpg' width='50px' height='50px' >"
scope.htmlstring = scope.htmlstring+"</div><div class='right-wrapper'><div class='top-right-wrapper'><strong>{{firstname}}</strong> </div><div class='top-right-wrapper'>";
scope.htmlstring = scope.htmlstring + "<div class='left-inner'>{{lastname}}</div><div class='left-inner'>{{department}}</div></div>";
scope.htmlstring = scope.htmlstring + "<div class='top-right-wrapper'><div class='left-inner'>{{department}}</div>";
scope.htmlstring = scope.htmlstring + " <div class='left-inner'>{{lastname}}</div><div>{{testdata}}</div> ";
scope.htmlstring = scope.htmlstring + "<div ng-repeat='x in testdata'>{{x.col1}}{{x.col2}}</div> </div></div></div>";
scope.trustAsHtml = function (str) {
return $sce.trustAsHtml(str);
};
scope.interpolate = function (value, obj) {
return $interpolate(value)(obj);
};
}
}
}]);
and this is my templateUrl source code 这是我的templateUrl源代码
<div>
<div>
<div >
<div ng-repeat="obj in rarray">
<p ng-model="value" ng-bind-html="trustAsHtml(interpolate(htmlstring,obj))" class="control"></p>
</div>
</div>
</div>
when is use this directive i am able to access all property values accept that array which is inside of first object, its just giving me the json, this is the image 什么时候使用这个指令我能够访问所有属性值接受第一个对象内部的数组,它只是给我json,这是图像
$interpolate
does not handle directives like ngRepeat
, see this . $interpolate
不处理像ngRepeat
这样的指令,请看这个 。
You need to use $compile
instead. 你需要使用
$compile
。 I use the bindHtmlCompile
directive for these cases, see this . 我对这些情况使用
bindHtmlCompile
指令,请参阅此内容 。
Your directive updated: 你的指令更新了:
.directive('scocurepeater', ['$compile',
function($compile) {
return {
restrict: 'A',
replace: true,
scope: {},
templateUrl: 'repeater.html',
link: function(scope, element, attr, $compile) {
//
scope.rarray = [{
"firstname": "employee1",
"lastname": "last1",
"department": "Dept1",
"testdata": [{
"col1": "column11",
"col2": "column12"
}, {
"col1": "column21",
"col2": "column21"
}]
}, {
"firstname": "employee2",
"lastname": "last2",
"department": "Dept2"
}, {
"firstname": "employee3",
"lastname": "last3",
"department": "Dept3"
}, {
"firstname": "employee4",
"lastname": "last4",
"department": "Dept4"
}];
scope.htmlstring = "<div class='wrapper'><div class='left-wrapper'><img src='http://betanews.com/wp-content/uploads/2014/05/Enterprise-apps.jpg' width='50px' height='50px' >"
scope.htmlstring = scope.htmlstring + "</div><div class='right-wrapper'><div class='top-right-wrapper'><strong>{{firstname}}</strong> </div><div class='top-right-wrapper'>";
scope.htmlstring = scope.htmlstring + "<div class='left-inner'>{{obj.lastname}}</div><div class='left-inner'>{{obj.department}}</div></div>";
scope.htmlstring = scope.htmlstring + "<div class='top-right-wrapper'><div class='left-inner'>{{obj.department}}</div>";
scope.htmlstring = scope.htmlstring + " <div class='left-inner'>{{obj.lastname}}</div><div>{{obj.testdata}}</div> ";
scope.htmlstring = scope.htmlstring + "<div ng-repeat='x in obj.testdata'>{{x.col1}}{{x.col2}}</div> </div></div></div>";
}
}
}
]) ])
The body of the template: 模板的正文:
<div>
<div ng-repeat="obj in rarray">
<p bind-html-compile="htmlstring" class="control"></p>
</div>
</div>
Fiddle: https://jsfiddle.net/masa671/fLa9o1pe/ 小提琴: https : //jsfiddle.net/masa671/fLa9o1pe/
UPDATE: 更新:
Here's a screenshot of the fiddle: 这是小提琴的截图:
The proof that it works are the lines: 它的工作原理是:
column11column12
column21column21
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.