0

У меня есть многостраничное веб-приложение AngularJS, которое служит панелью аналитики. В настоящее время я использую $ scope для создания переменных, чтобы динамически отображать некоторые данные на страницах HTML. Вместо того, чтобы создавать переменные $ scope, которые будут глобальными, независимо от того, какая страница посетит пользователь, я хотел бы ограничить переменные только их страницей и их страницей. Поскольку я новичок в Angular, я понятия не имею, как это сделать. Любые идеи о том, что я могу сделать?

ответ

4

$ переменные области не являются глобальными; они специфичны для контроллера. Если вам нужны переменные, специфичные для каждой страницы, поместите контроллер на каждую страницу (и не добавляйте контроллер в родительский элемент, так как его область наследуется).

1

Создайте отдельный контроллер для каждой страницы. $ scope в nt global. Его объем ограничивается контроллером

1

Ваш $scope базируется на контроллере, так, чтобы сделать вещи, специфичные для страницы сделать что-то вроде этого:

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

app.controller('pageOne', ['$scope', function ($scope) { 
    $scope.forThis = "value for page one controller"; 
}]); 

app.controller('pageTwo', ['$scope', function ($scope) { 
    $scope.forThis = "value for page two controller"; 
}]); 

http://jsfiddle.net/Lzpp3ve3/

+0

Поскольку плакат находится под впечатлением, что $ scope является глобальным, весьма вероятно, что у него есть контроллер, прикрепленный к элементу высокого уровня (например, «»), свойства которого «$ scope» наследуются в значительной степени каждый другой элемент. Ему также необходимо избавиться от этого. –

+0

@AlvinThompson, да, это будет просто вопрос о том, чтобы обладать точным контроллером, имеющим отношение к его страницам. –

+0

У меня есть контроллер для каждой страницы. По какой-то причине у меня создалось впечатление, что объем $ будет иметь ценности во всем мире. Я просто запускал тесты, и это работает, как вы, ребята, сказали! Спасибо :) – Niraj

0

Да, вам нужно вызвать синтаксис controllerAs. Независимо от того, выполняете ли вы это в своей маршрутизации или в своих HTML-элементах, это не имеет значения. Но это позволяет использовать пространство имен в Angular. В следующем примере я предполагаю, что вы вызываете директиву ng-controller на своих элементах HTML.

Ваш HTML будет:

<div ng-controller="MyController as my"> 
    {{my.var}} 
</div> 

И ваш контроллер будет

.controller("MyController", function() { 
    this.var = "hello world"; 
} 

Это реализуется с угловой 1.3.X, если я правильно. $ scope фактически загрязняет, так как он добавляет к прототипному контроллеру цепочки наследования. То есть дочерние контроллеры doinherit $ scope переменные от их родителей.