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

Функцията showOrHide ще върне true, ако щракна върху връзка.

Тествах този код с функциите alert и console.log и той работи, но ако искам да тествам този код в директиви ng-show или ng-hide, няма да работи. Не мога да разбера този въпрос.

Sum: функцията връща 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="/bg@{{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="/bg@{{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

Въпреки че обичам jQuery, защо съветвате да включите цяла библиотека за черна задача? Дори твоят пример не го използва.
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