Угловая функция нг-если + не работает

0

В этом первом коде, когда я изменяю anoini, функция gerar() показывает старое значение.

Но, когда я удаляю <div ng-if.... работает отлично.

вы знаете, что неправильно?

Tks

// JavaScript Document
var app = angular.module('dadosHist', []);

app.controller('dadosHistCtrl', function($scope) {
	$scope.mesini = 1; $scope.anoini = 2011;
	$scope.mesfim = 7; $scope.anofim = 2015;
	$scope.log = "";
	$scope.escolherperiodo = true;
	
	$scope.gerar = function() {
  
		this.log = this.anoini;
		meses = ((this.anofim - this.anoini) * 12) + (12 - this.mesini) + this.mesfim;
		qtdLoop = arrEstacoes.length * meses;
		tempoEstimadoMinutos = Math.round((qtdLoop * 20)  / 60 );

        this.log = 'Tempo Estimado: ' + tempoEstimadoMinutos + ' min.' ;
	}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>


<div ng-app="dadosHist" ng-controller="dadosHistCtrl">
<input type="checkbox" ng-model="escolherperiodo">Escolher Período<br>
<div ng-if="escolherperiodo">
<input type="text" ng-model="mesini" placeholder="Mes">/<input type="text" ng-model="anoini" placeholder="Ano"><br>
<input type="text" ng-model="mesfim" placeholder="Mes">/<input type="text" ng-model="anofim" placeholder="Ano"><br>
</div>
<button ng-click="gerar()">Gerar</button> <br>

{{log}}

    

</div>
Теги:

2 ответа

1
Лучший ответ

Всегда используйте точку в ng-model ! , Другими словами, используйте объекты не примитивы.

ng-if создает дочернюю область, и поскольку вы используете примитивы в ng-model вы теряете привязку 2-х сторон к сфере видимости из этой дочерней области.

var myModel ={
      mesini : 1,
      anoini : 2011,
      mesfim : 7,
      anofim : 2015
};
$scope.myModel = myModel;

HTML

<input type="text" ng-model="myModel.mesini">

Тогда в функции:

$scope.gerar = function() {

    $scope.log = myModel.anoini;
    var meses = ((myModel.anofim - myModel.anoini)......

     .....
}

Понимание области вложенности в угловое - это самое важное, что нужно узнать при использовании фреймворка

1

Вы не должны присваивать значение этому, а $ scope внутри функции gerar:

$scope.gerar = function() {

    $scope.log = $scope.anoini;
    meses = (($scope.anofim - $scope.anoini) * 12) + (12 - $scope.mesini) + $scope.mesfim;
    qtdLoop = arrEstacoes.length * meses;
    tempoEstimadoMinutos = Math.round((qtdLoop * 20)  / 60 );

    $scope.log = 'Tempo Estimado: ' + tempoEstimadoMinutos + ' min.' ;
}
  • 0
    на самом деле, привязка всего к этому (контроллеру) и кювете полностью была бы современным решением. Но вы правы, не смешивая их :-)
  • 0
    Я попробовал это, не работает. но TKS для вас комментарий!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню