首先,如果我会感到困惑,我很抱歉,但我整个晚上都在解决这个问题,而且我已经阅读了几十个 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,请忽略树枝逻辑):
...
<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 行控制器时,数据根据路由参数正确初始化,但在执行后searchTitle()
它没有更新。当我删除前两行时,路由定义的数据不会被拉出(显然),但该searchTitle()
方法正确地填充了mainfilter
字段和重复<li>
的 s。
我很绝望,我建议范围有问题,但目前我的信息超载,非常感谢你的帮助,所以!