With one out, Iannetta pulled a 2-1 fastball from Tim Collins (0-3) down the line in left that just made it over the wall to give the Angels their first lead of the game.
“It was a fastball down,” Iannetta said of the pitch that left the yard. “I didn’t know if it was going to get out but I am glad it did. It’s an awesome feeling.”
Michael Kohn (2-1) earned the win for pitching a scoreless top of the eighth and Ernesto Frieri made the lead stick by nailing down his sixth save of the season.
David Freese finished with two RBI and Mike Trout drove in the other run for Los Angeles, which has won four of its last five.
Eric Hosmer, Pedro Ciriaco and Alex Gordon each knocked in a run apiece for the Royals.
“Anytime you lose a game like that is frustrating,” said Royals manager Ned Yost. “Especially the way (Jason) Vargas pitched.”
Vargas, who spent the 2013 season with the Angels, was charged with one run on three hits with five walks and six strikeouts over 6 1/3 innings in the no-decision.
Kansas City opened the scoring with a three-run third inning.
Jimmy Paredes reached on a one-out single to center, then advanced to second on a balk by Angels starting pitcher Garrett Richards.
Ciriaco followed with a double that plated Paredes and Jarrod Dyson singled to put runners at the corners.
Hosmer lifted a sacrifice fly to left that made it 2-0 and Gordon knocked in Dyson with a single two batters later.
With runners at the corners in the bottom of the seventh, Trout ripped a double down the left-field line that scored Iannetta.
Albert Pujols was then hit to load the bases and Freese poked a single out to center that knotted the game at 3-3.
C.J. Cron then singled sharply to right, but Lorenzo Cain fired home to nab Pujols at the plate to end the inning.
Salvador Perez doubled with one out in the ninth, but Cain flied out to right and Alcides Escobar popped out to second to end the game.