Hernandez (3-2) finished his performance by setting down 14 straight batters. The Mariners' ace yielded five hits while walking one batter and striking out seven.
Morales' seventh-inning single scored Kyle Seager, snapping a 2-2 deadlock.
Jesus Montero belted a two-run homer in the sixth and Seager extended his career-high hitting streak to 16 games as the Mariners won for the second time in three games against the Angels.
Los Angeles starter Joe Blanton (0-4) surrendered three runs on nine hits and four walks over six frames, striking out five.
Chris Iannetta homered for the Angels.
Notable deaths of 2014 [PHOTOS]
LeBron James reveals his new Nike shoes