The victory in the opener of a three-game series ended the Blue Jays' four-game losing streak, while the Angels have lost six of their past seven games.
Happ (6-3) allowed two runs, three hits and three walks while striking out five as he earned his second straight win.
Tyler Clippard pitched a perfect ninth inning to pick up his second save of the season.
Angels starter Garrett Richards (4-3) allowed five runs (only one earned), six hits and two walks and had four strikeouts in five innings. He is winless in his three starts and has been the losing pitcher in two straight outings.
The Blue Jays scored all five runs in the first inning, capped by Morales' two-run homer.
With one out, Josh Donaldson hit his first of two doubles to end an 0-for-13 drought, Justin Smoak walked and Teoscar Hernandez hit an RBI single.
Two runs scored when Angels right fielder Chris Young was charged with an error after he flubbed Russell Martin's fly ball. Morales followed with his fourth homer of the season.
The Angels scored two runs in the fourth. Mike Trout walked, Justin Upton singled and Albert Pujols blooped an RBI single. After Shohei Ohtani forced Pujols at second on a grounder to third, Upton scored from third on a chopper to third by Andrelton Simmons.
Angels reliever Noe Ramirez struck out the side in the sixth and pitched a perfect seventh.
Toronto reliever Ryan Tepera allowed a run in the eighth. Martin Maldonado led off with a double, took third on a grounder to first by pinch hitter Kole Calhoun and scored on Ian Kinsler's sacrifice fly.
Angels reliever Cam Bedrosian pitched around a walk in the bottom of the eighth.
--Field Level Media
LA Angels | Toronto | |
Garrett Richards | Player | J.A. Happ |
Loss | W/L | Win |
5.0 | IP | 7.0 |
4 | Strikeouts | 5 |
6 | Hits | 3 |
1.80 | ERA | 2.57 |
LA Angels | Toronto | |
Chris Young | Player | Kendrys Morales |
1 | Hits | 2 |
0 | RBI | 2 |
0 | HR | 1 |
1 | TB | 5 |
.500 | Avg | .667 |