Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Uso do '$Scope'

Com base na aplicação alurapic, tentei criar minha própria aplicação do zero utilizando o angular seed. A aplicação esta funcionando, mas uma coisa me intriga. Ao criar o controller, fui utilizar o recurso $scope conforme abaixo:

angular.module('projeto')
    .controller('FotoController', function($scope, $routeParams, $location, FotoService) {

Porém este código não funcionava. Daí incluí a seguinte chadada no controller:

angular.module('projeto')
    .controller('FotoController', '$scope' function($scope, $routeParams, $location, FotoService) {

Assim funcionou.

Porque e quando devo incluir a chamada '$scope' antes da function do controller?

5 respostas

O segundo código que você colocou está escrito correto? Ele não compila com erro de sintaxe de Javascript.

Não tem motivo algum para o $scope não ter funcionando antes, foi outra coisa no seu código.

Aguardo o código correto que você postou como segundo.

OBS: se o código é esse mesmo, verifique no seu Angular Seed ( que eu não uso) se ele está fazendo pré-processamento dos seus arquivos JS com Gulp ou Grunt. Se estive, tem que bater lá na porta dos caras do Angular Seed e entender o que ele faz por debaixo dos panos. Mas independente disso, seu código tinha que ter funcionando da forma que você aprendeu.

Aliás, vi que não concluiu o curso de Angular ainda do Alura e que pulou todos os exercícios. Eles ajudam a fixar o que você aprendeu.

Flávio, me desculpe, eu havia digitado o código de cabeça e vi que cometi um erro de sintaxe, contudo a questão permanece, seguem os trechos de código de forma mais completa:

Este é o código do arquivo app.js (módulo principal):

'use strict';
// Declare app level module which depends on views, and components
var app = angular.module('angularMaterialApp', [
    'ngRoute',
    'ngMaterial',
    'ngMessages',
    'ngResource'
]);

Esse é o arquivo config.js:

app
    .config(['$routeProvider', function ($routeProvider) {
            $routeProvider.otherwise({redirectTo: '/home'});
        }])

    //Configuração do Tema do Angular Material
    .config(function ($mdThemingProvider) {
        $mdThemingProvider.theme('default')
            .primaryPalette('blue')
            .accentPalette('orange');
    });

Esse é o controller da home:

'use strict';
app
    .config(['$routeProvider', function ($routeProvider) {
            $routeProvider.when('/home', {
                templateUrl: 'views/home/home.html',
                controller: 'HomeCtrl'
            });
        }])

    .controller('HomeCtrl', ['$scope', function ($scope) {
            $scope.user = {
                title: ''
            };
        }]);

P.S.: Pode deixar que vou completar os exercícios direitinho. É ansiedade de meter a mão na massa do meu jeito mesmo. hehehe :-D

solução!

Já sei qual é a sua dúvida, é dessa sintaxe:

.controller('HomeCtrl', ['$scope', function ($scope) {
            $scope.user = {
                title: ''
            };
        }]);

É "a mesma coisa" que:

.controller('HomeCtrl', function ($scope) {
            $scope.user = {
                title: ''
            };
        });

A diferença entre uma e outra eu explico neste exercício:

https://www.alura.com.br/course/angularjs-mvc/section/11/exercise/7

Porém, esse uso é opcional. A forma que você aprendeu funciona, fique tranquila.

Aliás, nos treinamentos que faço, eu coloco conteúdo extra nos exercícios. É uma peculiaridade minha. Mais uma motivação para você praticar e mandar ver em todos eles.

Bom estudo.

Resolveu seu problema Diane?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software