Los Angeles and St. Louis completed the exchange on Thursday. Fowler heads to the Angels in exchange for a player to be named later or cash considerations. The Cardinals also will send $12.75 million to the Angeles in the swap to offset Fowler's 2021 salary.
"We are extremely grateful for everything that Dexter has done for us over the past four years, both on the field and with his generous work in the community," Cardinals president of baseball operations John Mozeliak said in a news release.
"With the expectation that we will have plenty of competition in the outfield this season, and with Dexter's approaching free agency, we felt that this deal made the most sense for all parties."
Fowler, 34, hit .233 with four home runs and 15 RBIs in 31 games last season for the Cardinals. The 13-year veteran hit .238 with a career-high 19 home runs and 67 RBIs in 150 games in 2019. Fowler, a 2016 All-Star, has hit .259 for his career.
The switch-hitting outfielder played the first six years of his career for the Colorado Rockies. Fowler then spent one season with the Houston Astros before he spent two years with the Chicago Cubs. He came to St. Louis in free agency before the 2017 season.
He won a World Series in 2016 with the Cubs.
"I think there's a couple things we really liked, and No. 1, the guy," Angels general manager Perry Minasian told MLB.com. "It's an outstanding human being. It's a high-energy player, which over a 162-game season is really important.
"And this guy brings that smile, that energy on a daily basis and we still think he can play. We think there's a lot left in the tank. He had a down year last year and he's the first one to tell you that. But the homework we've done. He's put a ton of work in this off-season."
Fowler has a $16.5 million salary in 2021 and is a free agent next off-season. He will likely start in right field for the Angels in 2021, with Justin Upton in left field and Mike Trout in center field.