2015-09-12 3 views
0

Я пытаюсь прикрепить notes к $scope вместо контроллера (это) в следующем коде:

angular.module('NoteWrangler') 
.controller('NotesIndexController', ['$http', function($http) { 
    var controller = this; 


    $http({method: 'GET', url: '/notes'}).success(function(data) { 
    controller.notes = data; 
    }); 
}]); 

Так что, когда я определяю $scope как следующее:

.controller('NotesIndexController', ['$scope', function($scope)

Не работает, так как мне нужно было бы определить $http где-нибудь, чтобы использовать его в коде? Итак, где именно я должен определить $scope, то?

Я ссылался на документацию this.

ответ

0
angular 
    .module('NoteWrangler') 
    .controller('NotesIndexController', ['$scope', '$http', function($scope, $http) { 

     $http({method: 'GET', url: '/notes'}).success(function(data) { 
      $scope.notes = data; 
     }); 

    }]); 
0

Не уверен, почему вы используете var controller = this; но вы не вводили $ HTTP

Вы можете использовать его как

.controller('NotesIndexController', ['$scope', '$http', function($scope, $http){ 
    $http({method: 'GET', url: '/notes'}) 
     .success(function(data) { 
     $scope.notes = data; 
    }); 
}]); 
+0

Он вводится ... –

+0

В первой версии его там не было, обновлено последним на –

1

Вы не «определить» $scope, это основа объект, который управляется для вас.

Если вы используете синтаксис ControllerAs, ваш контроллер может быть добавлен в $scope в качестве свойства. В противном случае вам нужно будет обратиться к объекту $scope, который можно вводить через инъекцию угловой зависимости. Вы можете вводить столько зависимостей, сколько необходимо для своего приложения.

Таким образом, два варианта, которые у вас есть доступны для вас:

ControllerAs:

angular.module('NoteWrangler') 
.controller('NotesIndexController', ['$http', function($http) { 
    var controller = this; 


    $http({method: 'GET', url: '/notes'}).success(function(data) { 
    controller.notes = data; 
    }); 
}]); 

<div ng-controller="NotesIndexController as controller"> 
    {{controller.notes}} 
</div> 

Прямой $scope:

angular.module('NoteWrangler') 
.controller('NotesIndexController', ['$scope', '$http', function($scope, $http) { 
    var controller = this; 


    $http({method: 'GET', url: '/notes'}).success(function(data) { 
    $scope.notes = data; 
    }); 
}]); 

<div ng-controller="NotesIndexController"> 
    {{notes}} 
</div> 

Обратите внимание, что $scope объекта подразумевается в первом пример и не требуется в коде контроллера, а явный во втором. Также обратите внимание, что $scope содержит некоторые конкретные правила относительно примитивов и наследования прототипов, поэтому всегда рекомендуется использовать точку в ваших привязках HTML, которые синтаксис ControllerAs выполняется автоматически.

В конечном счете, выбор синтаксиса для использования зависит от вас, но рекомендуется, чтобы он был согласованным во всем приложении и всегда ссылался на $scope или ссылался только на специальные свойства, которые вы не можете достичь каким-либо другим способом.

+0

Использование синтаксиса Controller As, это определенно путь. $ scope использует другие методы, и если вы используете контроллер, он заставляет вас вводить $ scope только тогда, когда вам это действительно нужно. Это лишь одно из преимуществ этого синтаксиса. –

Смежные вопросы