не совсем понятно зачем спрашивать с сервера те данные что вы и отправляете. $apply вызывается у $scope если произошли изменения в скопе из вне экосистемы ангуляра, тоесть $timeout(func) это экосистема ангуляра и $apply вызывать не надо, а вот setTimeout(func) это уже то чо называется из вне и внутри нужно вызвать или $digest или $apply что почти одно и тоже.
Далее..
Если вы находитесь в контроллере CTRL_1, который является дочерним к контроллеру CTRL_2 то чтобы внутри контроллера CTRL_1 обратиться к элементам скопа родительского контроллера нужно внутри CTRL_1 вызывать вот так
$scope.$parent.userData = res.data