Reputation: 163
I am trying to show a diff for two JSON objects in Angular 4 view, I am using this library (angular-object-diff) originally built for AngularJS.
Demo of that library: Link
I tried to import this JS library the following way:
JS file I am trying to import: angular-object-diff.js, doesnt have a exported variable
In my typings.d.ts ( I added the following):
declare var ObjectDiff: any;
In my angular-cli.json, I added
"scripts": [
"../node_modules/angular-object-diff/dist/angular-object-diff.js"
],
In my component file:
const json1 = {
name: 'John'
};
const json2 = {
name: 'Johnny'
};
const diff = ObjectDiff.diffOwnProperties(json1, json2);
this.jsonViewData = ObjectDiff.toJsonDiffView(diff);
In my view:
<pre ng-bind-html="jsonViewData"></pre>
<pre> {{jsonViewData}}</pre>
Nothing seems to be working, I get the error that "ObjectDiff" is not defined in the console"
Can someone please let me know if I am doing in thing wrong ? Suggestions for displaying the JSON diff are also welcomed :)
** Thank you
Upvotes: 2
Views: 484
Reputation: 222484
The library doesn't export anything. It uses IIFE to not pollute global scope with local variables. It's impossible to reach local variables from the outside, this makes Module pattern so effective (and annoying).
The library uses AngularJS angular
global and expects that it will exist. This creates a problem, because Angular 4 application should mock angular
global in this case. Moreover, the code itself relies on AngularJS-specific units ($sce
service).
The library should be forked and modified to suit the expectations. The mentions of angular
should be removed. Considering that script will be executed in module scope, IIFE should be removed and appropriate exports should be added.
Upvotes: 2