Angular, функция возвращает true, но ng-show не работает

Функция showOrHide вернет true, если я нажму на ссылку.

Я протестировал этот код с функциями alert и console.log, и он работает, но если я хочу протестировать этот код в директивах ng-show или ng-hide, он не будет работать. Я не могу понять эту проблему.

Сумма: функция возвращает false, если я нажму на какую-либо ссылку, она вернет true. Но true и false не будут работать в ng-show.

angular.js file

$scope.showOrHide = function (value) {
        if (typeof value !== 'undefined')
        {
            return alert(true);
            //console.log("true");
            //return true;
        }else {
            return alert(false);
            //console.log("false");
            //return false;
        }
    };
    $scope.projectId = $stateParams.projectId;
    $scope.showOrHide($stateParams.projectId);

html file

<tr ng-repeat="n in data.projects track by $index"
    ng-href="@{{n.id}}"
    ui-sref="goTo({ projectId: n.id })">
    <td>@{{n.project_code}}</td>
    <td>@{{n.project_name}}</td>
    <td class="text-primary">will add</td>
    <td class="text-primary">will add</td>
    <td class="text-primary">@{{n.status}}</td>
    <td ng-show="showOrHide">test</td>
</tr>


person Joey Göksu    schedule 11.10.2016    source источник


Ответы (5)


Вы ng-show основаны на функции, а не на переменной, поэтому вам нужно написать ее как функцию.

HTML:

<td ng-show="showOrHide('undefined')">test</td>

JS:

$scope.showOrHide = function (value) {
        if (typeof value !== 'undefined')
            return true;
        else 
            return false;

    };
person Ohjay44    schedule 11.10.2016
comment
Он не показывал никаких данных, но я нажимаю одну ссылку для изменения возвращаемого значения, но оно не изменилось. Я не понимаю, почему это происходит - person Joey Göksu; 12.10.2016

Если я понял, чего вы пытаетесь достичь (показывать элемент, только если существует $stateParams.projectId), вы можете просто использовать уже установленную вами переменную, поэтому удалите функцию и просто используйте следующее:

контроллер:

app.controller('myController', function( $scope, $stateParams) {

  // other code here...

  $scope.projectId = $stateParams.projectId || false;
});

Посмотреть:

<tr ng-repeat="n in data.projects track by $index"
    ng-href="@{{n.id}}"
    ui-sref="goTo({ projectId: n.id })">
    <td>@{{n.project_code}}</td>
    <td>@{{n.project_name}}</td>
    <td class="text-primary">will add</td>
    <td class="text-primary">will add</td>
    <td class="text-primary">@{{n.status}}</td>
    <td ng-show="projectId">test</td>
</tr>
person Enrico Deleo    schedule 11.10.2016

Я отказываюсь от всех решений, потому что они не работают, поэтому я не пересматривал свой код. Я поменял их всех.

Вот решение.

JS-файл

$scope.checkThis = true;

$scope.isShow = function (number) {
    return number;
};
$scope.toFalse = function () {
    $scope.checkThis = false;
};
$scope.toTrue = function () {
    $scope.checkThis = true;
};

HTML-файл

<tr ng-repeat="n in data.projects track by $index"
    ng-href="@{{n.id}}"
    ui-sref="goTo({ projectId: n.id })">
    <td>@{{n.project_code}}</td>
    <td>@{{n.project_name}}</td>
    <td class="text-primary">will add</td>
    <td class="text-primary">will add</td>
    <td class="text-primary">@{{n.status}}</td>
    <td class="text-primary" ng-click="toFalse()"
                        ng-show="isShow(checkThis)">test</td>
                    </tr>

Это простой способ, я думаю. Я трачу 3 часа в другую сторону.

person Joey Göksu    schedule 11.10.2016

Создайте переменную результата, например:

$scope.toShowOrToHide = $scope.showOrHide($stateParams.projectId);

И HTML:

<td ng-show="toShowOrToHide">test</td>

И JS возвращается без предупреждения:

$scope.showOrHide = function (value) {
    return (typeof value !== 'undefined');
};

Отредактировано:

$scope.toShowOrToHide = function() {
    return $scope.showOrHide($stateParams.projectId);
);

И HTML:

<td ng-show="toShowOrToHide()">test</td>

Вы, наверное, решили, что подходит для вас....

person Dmitri Algazin    schedule 11.10.2016
comment
Это не хорошо. Вы хотите, чтобы ng-show проверялся в каждом дайджесте (или вам не следует использовать ng-show). В этом примере элемент не будет отображаться при изменении $stateParams.projectId. - person arthurzp; 12.10.2016

Первый

$scope.stateParams = $stateParams;

затем

ng-show="stateParams.projectId"

Функция не требуется, и значение автоматически обновляется при изменении параметра.

person adam0101    schedule 12.10.2016