1

我已经绑定了一个带有 ng-click 事件的按钮,该事件会在我的控制器上触发一个函数。这再次使用 $http 获取一些数据,并且效果很好。但是在成功回调中更新我的模型时,UI 不会更新。我试过使用 $scope.$apply 和 $scope.safeApply 没有运气。UI 中什么也没有发生。从服务返回数据。请参阅下面的代码。

搜索控制器:

'use strict';

searchApp.controller('SearchController',    
function SearchController($scope, searchData) {

    $scope.query = '';
    $scope.isLoading = false;
    $scope.result = null;

    $scope.doSearch = function () {
        $scope.isLoading = true;

        searchData.getSearchResult($scope.query, function (result) {
            $scope.safeApply(function() {
                $scope.result = result;
                console.log($scope.result);
            });
        });
    };

    $scope.safeApply = function (fn) {
        var phase = this.$root.$$phase;
        if (phase == '$apply' || phase == '$digest') {
            if (fn && (typeof (fn) === 'function')) {
                fn();
            }
        } else {
            this.$apply(fn);
        }
    };
}
);

HTML 标记:

<div class="search-result" ng-controller="SearchController">

<input type="text" value="Enter query..." ng-model="query" />
    <input type="button" value="Search" ng-click="doSearch()" />
        <div ng-show="isLoading">
            Searching....
        </div>

        <h2>{{ result.SearchGroups }}</h2>

        <div class="result-box" ng-repeat="group in result.SearchGroups">
            <div class="head">
                <h2>{{ group.Name }}</h2>
                <!--<span class="seeAll">Se alle (13)</span>-->
            </div>
            <div class="body">

            </div>
        </div>

    </div>
4

1 回答 1

2

忘记那些$safeApply东西。只要searchData.getSearchResult$http用来发出它的请求,你就永远不需要调用$applyor $safeApply。这些只有在从非角度源获取事件时才真正需要。换句话说,在控制器中很少需要 dall $apply。如果你发现自己这样做,你应该知道为什么。

因此,假设您result正在通过,将其分配给$scope.result应该可以正常工作。一些问题要问:

  1. 你的console.log打印出来了吗?你真的收到你的数据了吗?
  2. result一个属性叫? SearchGroups区分大小写很重要
  3. 如果你转储结果{{result}},它会显示什么吗?

如果这些问题都没有产生结果,你能分享你的searchData.getSearchResult服务功能吗?

于 2013-09-29T19:43:29.423 回答