1

編集: この問題は、promise を使用してデータを通常のオブジェクトに解決する代わりに、ng-repeat \ ng-options を使用して関数の戻り値を反復しようとしたことが原因でした。

コード:

 $scope.layout.getPartialUriSafe = function(){
       return $sceDelegate.getTrusted($sce.RESOURCE_URL, $scope.layout.getPartialUri());
    }

$scope.layout.getPartialUri = function(){
    var cat = $location.search().cat;
    switch(cat){
        case 'settings':
            return 'partials/companySettings.html';
        case 'scouters':
            $scope.model.roleType = 'scouter';
            $scope.layout.roleTitle = $filter('translate')('SCOUTERS');
            return 'partials/roles.html';
        case 'recruiters':
            $scope.model.roleType = 'recruiter';
            $scope.layout.roleTitle = $filter('translate')('RECRUITERS');
            return 'partials/roles.html';
        case 'social':
            return 'partials/socialLinks.html';
        case 'design':
            return 'partials/companyDesign.html';
        default:
            return 'partials/companySettings.html';
    }
}

HTML:

<div class="settingsInnerContainer">
    <div data-ng-include data-src="layout.getPartialUriSafe()"></div>
</div>

上記はエラーなしで画面をフリーズします。

補間値を使用してみました

 '{{layout.getPartialUriSafe()}}'

しかし、角度パーサーエラーが発生しました。

また、プリミティブ補間を使用しようとしましたが、運もありません:

'{{layout.getPartialUriSafePrimitive}}'

layout.getPartialUriSafePrimitive - 部分的な URI を含む文字列が含まれています。

助けてくれてありがとう、私はしばらくの間 ng 1.2.x へのアップグレードを試みてきましたが、これまでのところ 1.2.2 で解決された多くの問題に遭遇しましたが、この特定の問題はまだ未解決のままです。

4

2 に答える 2

2

API の変更があります (残念ながら小文字で)。1.1.5 $location.search()およびlatest - 1.2.xのドキュメントを確認してください。(パズル: 違いがわかりますか?)

search(search, paramValue)

1.1.5 ではsearch引数はオプションですが、1.2.x ではそうではありません! だからこれを試してください:

var cat = $location.search("cat");

または、依存関係を追加しても構わない場合$routeParams(関数呼び出しが発生しないため、パフォーマンスが向上する可能性があります-数ナノ秒:-)

var cat = $routeParams.cat;
于 2013-11-27T10:45:14.843 に答える
1

多くの開発者が 1.0.x から 1.2.x への移行の難しさについて不平を言っているのを聞いたので、私の答えを共有したいと思います。

関数の戻り値を ng-options で反復処理しようとしていたようですが、これにはいくつかのロジックが含まれており、Angular はそれを気に入りませんでした。

他の MVC フレームワークとは異なり、Angular は関数ではなくダーティ チェックを使用して DOM を更新します。応用。

companySettings.html ファイルに次のようなものがありました。

<select name="industry" class="filedExpand" data-ng-model="model.formData.industry" data-ng-options="industry.id as industry.name for industry in model.industries()" data-ng-required="true">
    <option value=''>{{'INDUSTY' | translate}}</option>
</select> 

コントローラーの機能は次のとおりです。

$scope.model.industries = function(){
    if($scope.model.industryList){
    return $scope.model.industryList;
}

regService.getIndustries().then(function(data){
    $scope.model.industryList = data.data;
    return data.data;
},
function(data){
    console.log('error fetching industries');
 });
}

変更:

<select name="industry" class="filedExpand" data-ng-model="model.formData.industry" data-ng-options="industry.id as industry.name for industry in model.__industries" data-ng-required="true">
    <option value=''>{{'INDUSTY' | translate}}</option>
</select>

コントローラ:

$scope.model.getIndustries = function(){
        var deferred = $q.defer();
        var industries = regService.getIndustries();
        if(industries){
            // console.log($scope.model.industryList);
            deferred.resolve(industries);
            return deferred.promise;
        }

        regService.loadIndustries().then(function(data){
            // $scope.model.industryList = data.data;
            regService.setIndustries(data.data);
            deferred.resolve(data.data);

        },
        function(data){
            // console.log('error fetching industries');//supress
            deferred.resolve([]);
            regService.setIndustries([]);
        });
        return deferred.promise;
}

$scope.model.getIndustries().then(function(data){
    $scope.model.__industries = data;
});
于 2013-11-27T11:28:27.203 に答える