angularjs, uirouter - обновить ng-модель при обновлении контроллера? - PullRequest
0 голосов
/ 15 мая 2018

Просмотр 1:

<div ng-controller="ctrl1">
    <button ng-click="goToForm ({'name':'aaa'})">
    </button>
</div>

ctrl1:

    $scope.selectedList = {
        name: ""
    };

    $scope.goToForm = function(e) {
        $scope.selectedList.name = e.name;
        $state.go('view2');
        console.log(e); // prints updated value
    };

Просмотр 2:

<div ng-controller="ctrl1">

<input
        id="name"
        name="name"
        type="text"
        ng-model="selectedList.name"
        ng-readonly="true"
/>
</div>

Но поле ввода всегда пусто, даже если получитьдля просмотра вызывается goToForm ().Почему он не обновляет значение HTML?Представления изменяются с $ состояние ui.router.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Согласно вашему коду, оберните инициализацию переменной по умолчанию в методе и вызвать ng-init для view1, игнорировать view2 ng-init

Ваш контроллер должен выглядеть так, как показано ниже

 $scope.initializeVariables=function(){
               $scope.selectedList= {name : ""} 
        }

$scope.goToForm = function(e) {
    $scope.selectedList.name = e.name;
    $state.go('view2');
    console.log(e); // prints updated value
};

И view1 должен включать директиву ng-init, как показано ниже

<div ng-controller="ctrl1" ng-init="initializeVariables();">
    <button ng-click="goToForm ({'name':'aaa'})">
    </button>
</div>
0 голосов
/ 15 мая 2018

Вы делаете это неправильно, вы изменяете state, поэтому вы должны передать данные, иначе вы потеряете их.

$scope.goToForm = function(e) {
    var obj = {name: e.name};
    $state.go('view2',obj);
    console.log(e); // prints updated value
};

и поместите одну функцию init в ctrl1.js который проверяет, есть ли какие-либо значения, переданные как $stateParam.Если таковые имеются, назначьте их соответствующим образом.

app.controller('ctrl1',function($stateParams){

init(); // your first line of controller

// then all your code from here

function init(){
   if($stateParams.name) {
        $scope.selectedList.name = $stateParams.name;
    }
 }

})

ИЛИ вы можете использовать ng-init="init()" на <div ng-init="init()">

...