Garcia's only blemish came on a two-run homer by Angels designated hitter C.J. Cron in the fourth inning, but the runs were unearned because the homer came immediately after third baseman Matt Carpenter's two-out error.
The Cardinals tallied nine hits, including two each by Stephen Piscotty, Yadier Molina and Randal Grichuk. Four of St. Louis' hits came in succession in a four-run second inning against Angels starter Matt Shoemaker, setting the tone for the game.
The Cardinals hit well in the clutch, going 4-for-9 with runners in scoring position.
Outside of Cron's homer, the only baserunners the Angels got into scoring position against Garcia came in the seventh inning when they had Albert Pujols (single) on third and Geovany Soto (double) on second with one out. Garcia struck out both Johnny Giavotella and Shane Robinson to end the threat and end any Angels hopes for a comeback.
Garcia (3-2) gave up four hits while striking out eight and walking one. Trevor Rosenthal pitched the ninth inning for his sixth save.
Shoemaker (1-5), called up from Triple-A Salt Lake to make the start, gave up four runs on seven hits and one walk in four-plus innings.
The win allowed the Cardinals the rare opportunity to pick up ground on the Cubs in the National League Central. St. Louis (18-16) moved within seven games of first place after Chicago lost both ends of a doubleheader to the San Diego Padres.
The Angels lost their fifth in a row and their ninth in 11 games. Los Angeles (13-20) fell 7 1/2 games behind the first-place Seattle Mariners in the American League West.
The Cardinals opened up a 4-0 lead in the second inning after their first five batters of the inning reached base -- a walk by Brandon Moss and consecutive singles by Molina, Matt Adams, Grichuk and Kolten Wong.
Aledmys Diaz and Carpenter followed with back-to-back sacrifice flies, and suddenly Shoemaker and the Angels were in another early hole.
NOTES: The Angels acquired RHP Jhoulys Chacin from the Braves in exchange for minor league LHP Adam McCreery. Chacin, 28, was 1-2 with a 5.40 ERA in five starts for Atlanta this season. He likely won't be activated until Saturday, when he would start against the Mariners in Seattle. ... Angels INF/OF Ji-Man Choi was designated for assignment in order to make room on the roster for RHP Matt Shoemaker, who was called up from Triple-A Salt Lake to start the game. Choi, a Rule 5 selection by the Angels, hit .056 (1-for-18) in 14 games. ... Cardinals RHP Carlos Martinez threw a bullpen session without any problems and is on schedule to start Saturday's game against the Dodgers. Martinez had to leave his May 6 start early because of flu-like symptoms, so the Cardinals gave him a couple extra days of rest between starts.