まず、混乱させて申し訳ありませんが、私はこの問題を一晩中解決しており、何十もの 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、twig ロジック 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 行がある場合、データはルート パラメータに応じて正しく初期化されますが、実行後にsearchTitle()
更新されないことです。最初の 2 行を削除すると、ルートによって定義されたデータは (明らかに) プルされませんが、メソッドはフィールドと繰り返されるs のsearchTitle()
両方を正しく入力します。mainfilter
<li>
私は絶望的です。スコープに何か問題があることを示唆していますが、現在、情報が過負荷になっているため、助けていただければ幸いです。