2016-02-18 2 views
0

В app.js файле я определили следующее:AngularJS структура проекта и ОПРЕДЕЛЕНИЯ

var app = angular.module("app", ["ngRoute"]); 

В testController.js я определил следующее:

app.controller('testController', ['$scope'], function($scope) { 
    $scope.temp1 = ""; 
    $scope.temp2 = -1; 
}); 

В testService.js я определил следующее:

app.factory('testService', function ($http, $scope) { 
    'use strict'; 
    return {   
     list: function (callback) { 
      $http.get('url?param=' + $scope.temp1).success(callback); 
     } 
    }; 
}); 

В testController.js и testService.js пуха говорит мне, что приложение является неопределенным. Как я могу указать оба файла, которые приложение является приложением из app.js?

Как сообщить testService.js, что $ scope.temp1 фактически взят из testController.js?

Благодаря

ответ

1

Во-первых, весь код должен быть завернуты в непосредственно вызван выражением функции.

https://github.com/johnpapa/angular-styleguide#iife

(function(){ 
    real code goes here 
})(); 

Это сохраняет глобальное переменного пространство чистой

Чтобы получить доступ приложения из другого кода, вы не .. вы получите его снова. Таким образом, ваш контроллер будет выглядеть так:

(function(){ 
    angular.module("app").controller("testController", .... 
})(); 

И, наконец, часть контроллера вашего кода имеет неуместные скобки. Закрытие] должно быть после функции.

(function(){ 
    angular.module("app").controller("testController", ['$scope',function($scope){ 
     // function code here 
    }] 
})(); 

И ваш сервис одноэлементно (есть только один для всего приложения. Таким образом, вы не прошли бы сферу конструктору, как у вас, но вы бы передать его функции, необходим доступ к нему .

Но передача области до такой функции, вероятно, будет тесно связана с вашим контроллером, что вам не нужно делать. Вы должны извлекать из службы и передавать определенные элементы в том, что им нужно, а не область, которая может измениться.

+0

Обтекание в IIFE совершенно не имеет значения, если вы используете 'angular.module ('app')'. «угловое» уже находится в глобальном масштабе, а для остальных нет ничего объявленного, чтобы вы могли его оставить. – iH8

+0

Спасибо. Так что, если мне нужно снова получить приложение для каждого объекта, что такое «одинокий» app.js? Поэтому вместо того, чтобы использовать $ scope.temp1 внутри службы, я должен передать его как параметр своей функции и использовать этот параметр? можете ли вы указать мне пример такого вызова службы? – Amos

+0

Lonely app.js - это просто определить модуль и определить зависимости, которые могут существовать на уровне приложения. Ленивые программисты размещают там все зависимости, но вы действительно должны объявлять их как можно дальше от иерархии. Да, вы правы, пропустите temp в качестве параметра. изменить функцию списка, чтобы принять обратный вызов и параметр температуры –

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