separate directive & watcher implementation