AngularJS $范围更新没有反映在视图(AngularJS $scope updates no

2019-07-17 15:51发布

首先,我很抱歉,如果我将是混乱的,但我解决这个问题,整个晚上,我读过几十个SO问题和AngularJS的文章,所以我什至不知道,如果现在我知道哪来的问题:)

我有一个NG-app,其中时,我定义的几个属性,默认数据控制器$scope ,视图停止时得到这个数据变化以后编程更新。

这里是我的代码很短的例子:

...
config(['$routeProvider', function($routeProvider) {
$routeProvider.
    when('/abc/:letter', {templateUrl: template, controller: FilterCtrl}).
    otherwise({redirectTo: '/abc/a'});
}])
...

控制器:

function FilterCtrl($scope, $http, $routeParams) {

    $scope.mainfilter = $routeParams.letter;
    $scope.listItems = $http.post($scope.url, {'filterType': 'abc', 'letter': $routeParams.letter});

    $scope.searchTitle = function(search) {
        $scope.mainfilter = 'Film: ';
        //just test code to see if the data changes, will be other http call actually
        $scope.listItems = $http.post($scope.url, {'filterType': 'abc', 'letter': 'n'});
    }
}

主要的标记,其中,所述视图被定义(Symfony2中,忽略了树枝逻辑PLS):

    ...
    <div class="sort cell-1022 transparent-gray-back overflow-fix">

        <span class="sort--title">Search by</span>

        <select class="sort--selected chzn-select" ng-model="searchtitle" ng-change="searchTitle(searchtitle)">
            <option value="">film title</option>
            {% for id,title in titles %}
                <option value="{{ id }}">{{ title }}</option>
            {% endfor %}
        </select>

    </div>

</div>

<div class="divider transparent"></div>

<article class="wrapper">
    <div class="transparent-gray-back" ng-view>


    </div>

</article>

模板的关键部分:

<div class="scroll-list nice-scrollbars" >

    <span class="heading">{{ mainfilter.toUpperCase() }}</span>
    <ul class="item-list">
        <li ng-repeat="item in listItems.data | orderBy:order | filter:filter">
            <a ng-click="getRelated(item._id)">{{ item.title }}</a>
        </li>
    </ul>

</div>

主要的问题是,当我有第一2行控制器的存在,该数据依赖于路线PARAMS正确初始化,但在执行后searchTitle()它没有被更新。 当我删除前两行,由路线定义的数据没有被拉伸(明显),但searchTitle()方法正确地填充两个mainfilter字段和重复<li>秒。 我绝望了,我建议什么是错与范围,但我目前超载的信息,并会感谢您的帮助,这样的!

Answer 1:

包装初始“状态” /默认值控制到一个功能,并要求它在$viewContentLoaded事件帮助。 这里是我的解决办法:

$scope.$on('$viewContentLoaded', $scope.init);

$scope.init = function() {
    $scope.mainfilter = $routeParams.letter;
    $scope.listItems = $http.post($scope.url, {'filterType': 'abc', 'letter': $routeParams.letter});
}

我仍然不知道为什么,如果默认的数据被正确的控制器代码分配值仅设置是造成以被“卡住”这个数据,所以我愿意重新接受一个更好的答案,解释这个巫术。



Answer 2:

你可以试试下面的?

改变你正在使用$ http.post(在两个地方)的方式。 尝试使用它,如:

$http.post($scope.url, {'filterType': 'abc', 'letter': $routeParams.letter}).success(function(data) {
   $scope.listItems = data;
});

这意味着你的NG-重复细微的变化:

ng-repeat="item in listItems"


文章来源: AngularJS $scope updates not reflected in the view