Emptyform: просто с node_modules дело такое: вы делаете package.json, который вам эти модули для проекта ставит, затем на другом новом окружении npm install ставит вам все зависимости. Обойти можно, если не пользоваться loadNpmTask, можно писать просто loadTask, но там пути до файлов нужно указывать.
ummahusla: преобразуйте исходный массив в объект вида: {'2': 3, '4' : 1, 'A': 1}, по нему легко определить все комбинации, основанные на комбинации одинаковых карт.
Faliah: компоненты не заменяют директивы, для работы с DOM всё так же используются они (см. первый абзац: https://docs.angularjs.org/guide/component ). И apply использовать придется в случае, когда идет обработка не-angular событий. Watch почти никогда не нужен, когда дело касается input элементов, т.к. ng-model умеет очень много всего. Кстати я тоже этот плагин цеплял, воспользуйтесь ng-model + parsers/formatters werewolf: у $http сервиса есть transformRequest/transformResponse.
Руслан Шадура: да нет, канвас вещь хорошая, но довольно тяжеловесная. Я не считаю, что стоит делать визуальные фигульки на канвасе, если сайт не исключительно промошный.
Ситуация аналогична с ситуацией, когда внутри конструктора мы пишем this.foo = function() {}; v8 умеет с этим справляться и создает общую функцию для всех экземпляров. (Что кстати не значит, что стоит так делать).