Как заставить ng-init работать с множественными функциями в контроллере? - PullRequest
0 голосов
/ 01 сентября 2018

Мой HTML:

<div ng-app="APSApp" class="container">
    <br />
    <br />
    <input type="text" placeholder="Search Terms" />
    <br />
    <div ng-controller="APSCtl" >
        <table class="table">
            <tr ng-repeat="r in searchTerms" ng-init="searchTerms=getSearchTerms()" >
                <td>{{r.DisplayText}} <input type="text" ng-model="r.SearchInput"></td>
            </tr>
        </table>
    </div>
</div>
<script type="text/javascript">

    const moduleId = '@Dnn.ModuleContext.ModuleId';
    const tabId = '@Dnn.ModuleContext.TabId';
</script>
<script src="/DesktopModules/RazorCart/Core/Content/Scripts/angular.min.js"></script>

<script src="/DesktopModules/MVC/AdvancedProductSearchMVC/Scripts/AdvancedProductSearch.js"></script>

Моя угловая установка:

var aps = angular.module("APSApp", []);
aps.config(function($httpProvider) {
    $httpProvider.defaults.transformRequest = function(data) {
        return data !== undefined ? $.param(data) : null;
    };
});

aps.factory('SearchTerms', 
    function($http) {
        return {
            getSearchTerms: function(onSuccess, onFailure) {
                const rvtoken = $("input[name='__RequestVerificationToken']").val();
                $http({
                    method: "post",
                    url: "/DesktopModules/MVC/AdvancedProductSearchMVC/AdvancedProductSearch/GetAPS",
                    headers: {
                        "ModuleId": moduleId,
                        "TabId": tabId,
                        "RequestVerificationToken": rvtoken
                    }
                }).success(onSuccess).error(onFailure);
            }
        };
    });


aps.controller('APSCtl',
    function(SearchTerms, $scope) {
        function getSearchTerms() {
            $scope.searchTerms = [];
            successFunction = function(data) {
                $scope.searchTerms = data;
                console.log($scope.searchTerms);
            };

            failureFunction = function(data) {
                console.log('Error' + data);
            };
            SearchTerms.getSearchTerms(successFunction, failureFunction);
        }

        function doSomethingElse($scope) {}

    });

Я пытаюсь создать один контроллер с несколькими функциями. Это работает, если мой угловой контроллер выглядит так (и я не использую ng-init):

aps.controller('APSCtl',
    function(SearchTerms, $scope) {
            $scope.searchTerms = [];
            successFunction = function(data) {
                $scope.searchTerms = data;
                console.log($scope.searchTerms);
            };

            failureFunction = function(data) {
                console.log('Error' + data);
            };
            SearchTerms.getSearchTerms(successFunction, failureFunction);
    });

Я просто пытался сохранить связанные функции в одном контроллере. Что я делаю неправильно? Должен ли я на самом деле установить разные контроллеры для каждой функции?

1 Ответ

0 голосов
/ 01 сентября 2018

Вам не нужно присваивать значение в шаблоне, вы можете просто вызвать функцию,

 <table class="table" ng-init="getSearchTerms()>
            <tr ng-repeat="r in searchTerms" >
                <td>{{r.DisplayText}} <input type="text" ng-model="r.SearchInput"></td>
            </tr>
 </table>

у вас должна быть функция getSearchTerms () в вашем контроллере, чтобы она вызывалась,

aps.controller('APSCtl',
    function(SearchTerms, $scope) {
         $scope.getSearchTerms() {
            $scope.searchTerms = [];
            successFunction = function(data) {
                $scope.searchTerms = data;
                console.log($scope.searchTerms);
            };

            failureFunction = function(data) {
                console.log('Error' + data);
            };

            SearchTerms.getSearchTerms(successFunction, failureFunction);
        }

        function doSomethingElse($scope) {}

    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...