Nativescript Vue this. $ NavigateTo ничего не делает

РЕДАКТИРОВАТЬ: см. мой комментарий ниже о добавлении элементов в шаблон Vue

Сегодня снова ИЗМЕНИТЬ: Хорошо, вот что на самом деле приводит к тому, что this.$navigateTo перестает работать ... Если я импортирую службу для выполнения http-вызова к api отдыха в Friends.vue для получения данных в монтируется (), это приводит к тому, что this.$navigateTo перестает работать из вызывающего Home.vue. Кто-нибудь может подсказать, почему?

Это в Friends.vue ...

    mounted() {
    console.log(`${this.codeFile}: mounted() fired`);
    httpService.getAllFriends((data, err) => {
        this.friends = data;
        if (err) {
            console.error(
                `${this.codeFile}: mounted: getAllFriends: `,
                err
            );
        }
    });
},

Мне действительно кажется, что мой код похож на документацию, но мой this.$navigateTo(Friends) ничего не делает. Я вижу сообщение console.log в порядке, но страница не меняется. Что я не вижу в документации?

<template>
    <Page class="page">
        <ActionBar class="action-bar" title="Home"></ActionBar>
        <ScrollView>
            <StackLayout backgroundColor="#3c495e">
                <Label
                    text="Friends"
                    @tap="gotoFriendsPage()"
                    height="70"
                    backgroundColor="#43b883"
                />
                <Label text="Places" height="70" backgroundColor="#289062"/>
                <Label text="Messages" height="70" backgroundColor="#1c6b48"/>
            </StackLayout>
        </ScrollView>
    </Page>
</template>

<script>
import Friends from "./Friends";

export default {
    data() {
        return {
            codeFile: "Home.vue",
            friendsPage: Friends
        };
    },
    created() {
        //console.log(`${this.codeFile}: created() fired`);
    },
    mounted() {
        //console.log(`${this.codeFile}: mounted() fired`);
    },
    computed: {},
    methods: {
        gotoFriendsPage: function() {
            console.log(`${this.codeFile}: gotoFriendsPage fired`);
            this.$navigateTo(Friends);
        }
    }
};
</script>

<style scoped lang="scss">
// Start custom common variables
@import "../_app-variables.scss";
// End custom common variables

// Custom styles
.action-bar {
    background-color: $blue-dark;
    color: $blue-light;
}
.body {
    color: gray;
}
.fa {
    color: $accent-dark;
    font-size: 16;
}
.col-text {
    text-align: left;
    margin-bottom: 3;
    padding: 5;
}
.col-title {
    text-align: left;
    margin-bottom: 0;
    padding: 5;
    padding-bottom: 0;
    font-weight: bold;
}
.info {
    font-size: 20;
}
</style>

РЕДАКТИРОВАТЬ: добавление app.js

    import Vue from "nativescript-vue";
import Home from "./components/Home";

const template = `
    <Frame>
        <Home />
    </Frame>
`;

new Vue({
    template: template,
    components: {
        Home
    },
    mounted: function () {
        //console.log('app.js mounted fired...');
    },
    created: function () {
        //console.log('app.js created fired...');
    }
}).$start();

person Locohost    schedule 05.02.2019    source источник
comment
Возможно, проблема в устройстве или в компиляции. Я не вижу здесь ничего странного. На основе вашего кода я создал здесь пример play.nativescript.org/?template=play- vue & id = vmbEXA, и он работает для меня при проверке с помощью приложения Playground на Android   -  person jakob    schedule 06.02.2019
comment
Хммм, ты прав, это прекрасно работает на моем телефоне. Пока я тестирую только эмулятор и не могу заставить его работать. Я поиграю с этим позже сегодня. Спасибо @jakob!   -  person Locohost    schedule 07.02.2019
comment
@jakob Да, этот код работает локально. Так что я сделал не так? Так я создал экземпляр Vue в app.js? См. Ответ ниже. Я сделал это на основе демонстрационного / образца кода, который немного отличается от опубликованного вами примера.   -  person Locohost    schedule 09.02.2019
comment
@jakob и все, кто найдет это позже, простой пример jakobs действительно действительно работает на игровой площадке и локально. Проблема в OP, this.$navigateTo ничего не делает, возникает при добавлении дополнительных элементов в целевой шаблон Friends.vue. Если вы добавите другой StackLayout, или GridLayout, или ListView, или что-нибудь (кажется) к цели, the this.$navigateTo ОСТАНОВИТ работу. Почему?   -  person Locohost    schedule 10.02.2019
comment
Можете ли вы создать точный пример, подобный вашему, для игры на nativescript?   -  person jakob    schedule 10.02.2019
comment
@jakob Да, могу. Я сделаю это, когда у меня будет перерыв сегодня. Спасибо! :-)   -  person Locohost    schedule 11.02.2019
comment
@jakob, пожалуйста: play.nativescript.org/?template=play -vue & id = NnHdbs & v = 8 Это точно показывает, что я испытываю. Обратите внимание, что Friends.vue никогда не загружается, но вы видите console.log в методе при каждом щелчке. Теперь закомментируйте только код RestAPI и попробуйте еще раз. Теперь navigateTo снова работает. Что происходит?   -  person Locohost    schedule 11.02.2019
comment
@jakob, тьфу ... Нашел. Приятно, что Nativescript-Vue просто не справляется с этим и не показывает ошибок во время сборки или выполнения. Обратите внимание на module.exports в http-service.js. Что-то не хватает? ...   -  person Locohost    schedule 11.02.2019


Ответы (2)


Похоже, что Nativescript будет молча терпеть неудачу при определенных ошибках кода. Я просмотрел результаты сборки, и он не обнаружил отсутствующий module.exports. Кажется, процесс сборки должен это уловить. Правильно? Единственный способ увидеть эту проблему - this.$navigateTo будет автоматически завершаться ошибкой, если у вас есть эта ошибка кода при загрузке целевой страницы и вызове модуля. Супер странно.

См. Следующую площадку NS. Поищи в http-service.js. Обратите внимание, что module.exports отсутствует экспорт getAllFriends. Это невидимая проблема. Исправьте это module.exports, и все работает нормально.

https://play.nativescript.org/?template=play-vue&id=NnHdbs&v=8

Надеюсь, это кому-то поможет позже.

person Locohost    schedule 11.02.2019

Как вы создали экземпляр vue? Вы добавили рамку вот так?

// Start
new Vue({
    store,
    render: h => h("frame", [h(store.getters.isLoggedIn ? routes.Home : routes.Login)])
}).$start();
person Vince Lowe    schedule 08.02.2019
comment
Спасибо, @Vince Lowe! Я отредактировал OP и добавил app.js. Вот как это было у меня при публикации выше. Сейчас я меняю его, чтобы посмотреть, смогу ли я получить код jakob, работающий локально. Вы видите проблему в моем исходном файле app.js выше? - person Locohost; 09.02.2019
comment
@Vince_Lowe См. Мой комментарий о добавлении элементов в целевые Friends.vue, из-за чего this.$navigateTo перестает работать. Есть ли у вас какие-либо предположения, почему это происходит? Я очень застрял. Спасибо! :-) - person Locohost; 10.02.2019