Include
<script src="/js/angular/angular.min.js"></script>
<script src="/js/angular/angular-ui.min.js"></script>
<script src="/js/angular/app.js"></script>
myApp
"use strict";
var myApp = angular.module('myApp', ['ui'], function($interpolateProvider,$httpProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
});
If I do this
<p>[[ skills ]]</p>
I got this
[{"id":17,"type":"Content Management","name":"NPM","value":"84","description":null,"img_path":null,"created_at":"2017-03-08 14:00:26","updated_at":"2017-03-09 15:25:50"},{"id":16,"type":"Content Management","name":"Composer ","value":"80","description":null,"img_path":null,"created_at":"2017-03-08 14:00:14","updated_at":"2017-03-09 13:16:54"},{"id":15,"type":"Framework","name":"AngularJS","value":"73","description":null,"img_path":null,"created_at":"2017-03-08 13:59:00","updated_at":"2017-03-08 13:59:30"},{"id":14,"type":"Content Management","name":"RequireJS","value":"65","description":null,"img_path":null,"created_at":"2017-03-08 13:58:06","updated_at":"2017-03-09 13:17:10"},{"id":9,"type":"Content Management","name":"Bower","value":"70","description":null,"img_path":null,"created_at":"2017-03-08 13:54:53","updated_at":"2017-03-09 13:17:02"},{"id":8,"type":"Web Scaffolding","name":"Yeoman","value":"50","description":null,"img_path":null,"created_at":"2017-03-08 13:54:43","updated_at":"2017-03-09 13:09:57"},{"id":7,"type":"Build System","name":"Gulp","value":"90","description":null,"img_path":null,"created_at":"2017-03-08 13:54:18","updated_at":"2017-03-09 13:07:20"},{"id":6,"type":"Development Environment","name":"Docker","value":"60","description":null,"img_path":null,"created_at":"2017-03-08 13:53:59","updated_at":"2017-03-09 14:15:38"},{"id":5,"type":"Development Environment","name":"Vagrant","value":"70","description":null,"img_path":null,"created_at":"2017-03-08 13:53:46","updated_at":"2017-03-08 13:53:46"},{"id":3,"type":"Build System","name":"Grunt ","value":"88","description":null,"img_path":null,"created_at":"2017-03-08 13:49:40","updated_at":"2017-03-09 12:01:04"},{"id":2,"type":"Server Management","name":"Linux","value":"87","description":null,"img_path":null,"created_at":"2017-03-08 13:45:34","updated_at":"2017-03-09 14:15:27"},{"id":1,"type":"Framework","name":"Laravel 5","value":"95","description":null,"img_path":null,"created_at":"2017-03-08 13:24:16","updated_at":"2017-03-09 14:15:14"}]
If I do this
<p ng-repeat="skill in skills ">[[ skill.type ]]</p>
I got
Content Management
Content Management
Framework
Content Management
Content Management
Web Scaffolding
Build System
Development Environment
Development Environment
Build System
Server Management
Framework
Now, I tried this
<p ng-repeat="skill in skills | unique: 'skill.type' ">[[ skill.type ]]</p>
I got this
Content Management
What did I do wrong ? Why only 1 printing out ?
I expected to get something like this
Content Management
Framework
Web Scaffolding
Build System
Development Environment
Server Management
There is no groupBy built into AngularJS. You can wrap the lodash one if you don't feel like writing one yourself. In this case you could just use the _.uniq function (unless you're really grouping, not just selecting unique entries).
EDIT: Lodash is worth installing for the whole Swiss army knife of array of utilities it provides. You can filter for unique skill.type by something like
$scope.uniqueSkills = _.uniqBy($scope.skills, 'type');
Then in the view, use "ng-repeat=skill in uniqueSkills | orderBy: type"
There are a few ways to do this. You could also create a filter which calls on the lodash function, but this will do the trick.