Pettersson, who also had two assists, skated down the wing and snapped a shot from the left face-off circle glove side on Jordan Binnington.
"It was nice," Pettersson said. "I said five minutes earlier, I had 10 shots today I think, and never had that before. Felt good, but the puck wouldn't find the way in until the last shot I guess, so I'm happy with that."
Pettersson's goal came after Andrei Kuzmenko tied it 2-2 with 29 seconds left in the third period. He jammed in his own rebound from the edge of the crease with Arturs Silovs pulled for the extra skater.
J.T. Miller had a goal and an assist, and Silovs made 20 saves for Vancouver (23-30-5), which is 2-0-1 in its past three games.
"I think we deserved the outcome, yes I do," Canucks coach Rick Tocchet said. "We did a nice job in a lot of areas. It feels nice to let only two goals in. To win hockey games, you've got to defend well, and we did that."