angularjs: значение области видимости не обновляется

в файле detail.html есть кнопки:

<div ng-controller="test.views.detail">
<div data-ng-repeat="item in details"  scroll>
    <button ng-click="showDetails(item)">The details</button>

подробно.js файл

angular.module('test')
.controller('test.views.detail', function($scope) {

    $scope.detailsClicked = false;

    $scope.showDetails = function(item){
        $scope.detailsClicked = true;
    }....

в коде formDetail.html:

<div ng-controller="test.views.detail">
{{detailsClicked}}
<div ng-if="detailsClicked">...

Первоначально он показывает false для detailsClicked, когда я нажимаю кнопку, он переходит к функции showDetails, но значение $scope.detailsClicked никогда не обновляется! Это прямо вперед, не уверен, почему это не работает :(


person Sara    schedule 08.02.2015    source источник
comment
Не могли бы вы дать нам jsbin или что-то, на что мы могли бы быстро взглянуть? Или вставить в этот пост, как можно сделать сейчас? Кнопка находится внутри области действия контроллера? Также вы никогда не должны определять переменные в области видимости. Они всегда должны быть частью объекта. Вот почему синтаксис controllerAs полезен.   -  person Mike Cheel    schedule 09.02.2015
comment
Что, если вы замените ng-if на ng-show?   -  person botero    schedule 09.02.2015
comment
@botero я пытался не работает   -  person Sara    schedule 09.02.2015
comment
Я думаю, это потому, что с ng-repeat появилась дополнительная область.   -  person Mike Cheel    schedule 09.02.2015
comment
Спасибо @Майк. у вас есть какие-либо предложения/решения?   -  person Sara    schedule 09.02.2015
comment
Если вместо этого вы используете синтаксис ControllerAs, вы должны быть в состоянии сойти с рук, но, честно говоря, я не делал Angular некоторое время, поэтому немного заржавел (но я все еще помнил это так...). Я думаю, что ControllerAs позволит вам конкретно ссылаться на свойство detailsClicked контроллера, и поэтому angular будет знать, что делать (я думаю) = P.   -  person Mike Cheel    schedule 09.02.2015
comment
Как formDetail.html вступает в игру?   -  person Phil    schedule 09.02.2015
comment
Пробовали ли вы переместить $scope.detailsClicked в $scope.obj = { detailsClicked: false};? Лучше всего «всегда иметь точку в привязках» в более ранних версиях angular.   -  person Jim Schubert    schedule 09.02.2015
comment
Проверьте эту статью для объяснения контроллера. В нем есть то, что, как я думаю, я пытаюсь донести до вас. toddmotto.com/digging-into-angulars-controller-as-syntax   -  person Mike Cheel    schedule 09.02.2015
comment
@Phil есть main.html, в котором у меня есть: ‹div ng-include='app/test/views/detail/formDetails.html'› ‹/div›   -  person Sara    schedule 09.02.2015
comment
@JimSchubert не сработал :(   -  person Sara    schedule 09.02.2015
comment
Есть два экземпляра контроллера test.views.detail — один в formDetail.html, а другой в detail.html. Если вы хотите разделить состояние между двумя экземплярами, создайте службу, которая будет хранить состояние, или используйте параметры состояния, если вы используете ui-router.   -  person Brad Barber    schedule 09.02.2015


Ответы (1)


Это связано с тем, что вы используете один и тот же контроллер в двух местах и ​​ожидаете, что объект области будет таким же, а это не так. Каждый раз, когда вы вызываете ng-controller в своей разметке, будет создаваться новый объект области видимости. Если вы хотите, чтобы они основывались на одних и тех же данных, используйте службу.

Вот пример

app.controller('test.views.detail', function($scope, detailsClicked) {

    $scope.detailsClicked = detailsClicked;

    $scope.showDetails = function(item){
        $scope.detailsClicked.isClicked = true;
    }
});

Создайте фабрику/службу, которая сохранит данные, убедитесь, что данные

app.factory('detailsClicked', function(){
  var data = {
    isClicked: false
  }

  return data;
});
person yangli-io    schedule 09.02.2015