2016-01-26 6 views
1

У меня есть контроллер, который связан с 2 видами. В контроллере, я хочу область видимости переменного значения:Угловое изменение переменной области при настройке маршрута?

$scope.isOffset = false; 

Когда другой вид направляются, я хочу установить в действительности. Мои маршруты в моем app.js устанавливаются таким образом, как:

$routeProvider.when("/claimSub", { 
    controller: "claimsController", 
    templateUrl: "ppt/views/claims/claimSub.html" 
}); 

$routeProvider.when("/offsetSwipe", { 
    controller: "claimsController", 
    templateUrl: "ppt/views/swipes/offsetSwipe.html" 
}); 

Оба эти мнения также имеют входы, которые связаны с областью с:

$scope.claimInfo = { 
    id: "", 
    benefitId: "", 
    isSecIns: "", 
    isNoResid: "", 
    expenseTypeId: "", 
    fromDate: "", 
    toDate: "", 
    provider: "", 
    who: "", 
    depId: "", 
    age: "", 
    amount: "", 
    comments: "", 
    isOffset: "", 
}; 

Итак, убедившись, что второй маршрут как показан выше, это 'isOffset' - то же самое.

Я не использовал stateProvider, но не уверен, что это применимо здесь, поскольку одно представление не является подмножеством другого.

Так пытаясь понять, что я могу здесь сделать? Мне кажется, но я не могу понять, как наилучшим образом было бы изменить маршрутизацию и добавить какую-то переменную или сеттер в app.js для представления, для которого эта переменная имеет значение true.

+0

Возможный дубликат [Angular.JS : просмотр одного и того же контроллера, сбрасывание данных модели при изменении вида] (http://stackoverflow.com/questions/16210822/angular-js-views-sharing-same-controller-model-data-resets-when-changing-view) –

+0

Спасибо @DaanvanHulst - но это немного отличается, поскольку целью является использование одного контроллера для разных vi EWS. У меня также есть разные сервисы. Этот контроллер фактически использует несколько сервисов для обработки различных манипуляций с DOM и просмотра страниц. – Mark

+0

Но проблема у вас такая же, как и связанная справа? Он имеет два вида, которые используют один и тот же контроллер. И вы хотите убедиться, что в каждом представлении используется одна и та же переменная isOffset? Или я неправильно понял вопрос? –

ответ

1

Контроллер «claimsController» является экземпляр дважды, один раз для claimSub зрения и другой для offsetSwipe зрения.

Если вам нужно обмениваться данными между двумя зрения (маршруты), вы можете сделать это с service, или если вы хотите долю сферы вы должны добавить родительский контроллер (например, «mainController» к элементу, который обертывает все виды).

Например, используйте ng-controller="mainController", прикрепленный к <body>, и в этом контроллере установите переменную, которую необходимо разделить между двумя видами. Если вам нужно знать, когда изменения состояния (просмотра) используют $rootScope.$on("$routeChangeSuccess", ...).

+0

Спасибо. Функция ClaimController обертывает оба эти представления. Таким образом, это 2 вида, 1 контроллер, потому что многие функции в ClaimController необходимы для обоих представлений. Я могу использовать службу, но не знаю, как я могу изменить эту переменную области видимости от false до true на основе того, находится ли пользователь в одном или другом виде. – Mark

+0

Нет, как определено, что у вас ДВА отдельных индивидов «ClaimController»; если вы хотите только один экземпляр, вы можете прикрепить его к «родительскому» элементу HTML (т. е. тело) и удалить из $ routeProvider. – beaver

+0

Не уверен, что я следую. Можете ли вы показать, что вы имеете в виду? – Mark

0

Вы можете попытаться получить текущую страницу с $location.path(), а затем вы можете установить isOffset соответственно $scope.isOffset = currentPage === 'claimSub';

2

Когда маршрутизатор меняет взгляды он разрушает контроллер и его разрушает его объем. Затем он создает новую область и создает новый контроллер. Он делает это, даже если новый контроллер такой же, как старый контроллер.

Чтобы установить переменную, основанную на маршруте, поставить функцию решимость в маршрутах:

$routeProvider.when("/claimSub", { 
    controller: "claimsController", 
    templateUrl: "ppt/views/claims/claimSub.html", 
    resolve: { isOffset: function() { return false } } 
}); 

$routeProvider.when("/offsetSwipe", { 
    controller: "claimsController", 
    templateUrl: "ppt/views/swipes/offsetSwipe.html", 
    resolve: { isOffset: function() { return true } } 
}); 

Затем, когда контроллер начинает в новом виде:

$scope.isOffset = $scope.$resolve.isOffset; 
Смежные вопросы