Опция require в описании директивы дает нам возможность использовать контроллер другой директивы. Мы также можем указать массив контроллеров.
Объяснение можно посмотреть на egghead.io, код можно взять тут.
Важно: если поставить в начале значения символ ‘^’, то интерпретатор будет пытаться найти контроллер директивы в родительских элементах. Если не поставить – только на текущем елементе(как это было в примере на egghead.io).