首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular JS -从第三方回调函数调用angular

Angular JS -从第三方回调函数调用angular
EN

Stack Overflow用户
提问于 2018-01-28 20:06:40
回答 2查看 156关注 0票数 0

我有一个Angular 1.3应用程序,已经升级到1.6了,现在有几个函数不能用了。

这些函数在一个普通的JS脚本中调用,该脚本从一个控制器内部调用,以转发到另一个控制器和视图。

这是我的状态:

代码语言:javascript
复制
.state('track', {
    url: '/:area /:trackId /:type',
    parent: 'tracks',
    component: 'trackDetails'
})

下面是我的vanilla JS脚本中的代码(它使用第三方库(一个地图)来呈现实际的视图)。

代码语言:javascript
复制
function getTrackLink(track) {
    trackLink = "<div><a ui-sref=\"tracks/track({area:" + track.area + " + /trackId:"
            + track.id + "/type:" + track.type + " })\">" + track.name
            + "</a></div>";

    console.log(trackLink);

    return trackLink;
}

链接是不可点击的,因此不会在控制器内调用navigate.The JS函数,添加到下面.....

代码语言:javascript
复制
function MapCtrl($rootScope, $http, $stateParams, SearchOp, SearchResultsService, $state) {

const vm = this;

console.log('MapCtrl called');

console.log("stateParams:"+$stateParams);

vm.results = null;
vm.loading = true;

let latitude = 0;
let longitude = 0;
let distance = 0;
let currentZoom = 7;

if ($stateParams && typeof ($stateParams.latitude) !== 'undefined') {
    latitude = $stateParams.latitude;
    longitude = $stateParams.longitude;
    distance = $stateParams.distance;

    SearchResultsService.set(latitude, longitude, distance);

    $rootScope.searchPerformed = true;

} else if (!$rootScope.searchPerformed) {

    console.log("Defaulting co-ordinates to user's home town");
    latitude = $rootScope.currentLatitude;
    longitude = $rootScope.currentLongitude;
    distance = $rootScope.currentDistance;
    SearchResultsService.set(latitude, longitude, distance);

    $rootScope.searchPerformed = true;

} else {
    console.log('Rendering last search results');
}

console.log(`Search Params: ${latitude} : ${longitude} : ${distance}`);

SearchResultsService.get().then(data => {
    vm.loading = true;
    console.log(`Retrieved data from service: ${data}`);
    vm.results = data;
    loadMap(vm.results, currentZoom, $state);
    vm.loading = false;
}).catch(error => {
    vm.loading = false;
    vm.status = 'Unable to load trackdata: ' + error.message;
});


vm.search = (latitude, longitude, distance, currentZoom) => {

    vm.loading = true;

    SearchResultsService.set(latitude, longitude, distance);

    SearchResultsService.get().then(data => {

        console.log(`Retrieved data from service: ${data}`);
        vm.results = data;
        console.log("SearchResults"+ data);
        loadMap(vm.results, currentZoom);
        vm.loading = false;
    }).catch(error => {
        vm.loading = false;
        vm.status = 'Unable to load trackdata: ' + error.message;
    });

}

}

任何值得欣赏的想法……

EN

回答 2

Stack Overflow用户

发布于 2018-01-28 22:53:08

可能,这是sanitize的问题。你必须信任你的代码。仔细做这件事。

看看这里:$sce

我认为你应该使用像这样的东西:

代码语言:javascript
复制
<div ng-bind-html="vm.something"></div>

在控制器中

代码语言:javascript
复制
vm.something = $sce.trustAsHtml(vm.somethingUntrasted);
票数 1
EN

Stack Overflow用户

发布于 2018-01-29 20:25:56

我在上面的代码中看不到从控制器调用getTrackLink函数的任何地方。但是,作为一种解决方案,请尝试添加:

代码语言:javascript
复制
$rootScope.apply()

就在getTrackLink函数被调用之后。

如果函数是异步的,您可以尝试包装函数调用:

代码语言:javascript
复制
$rootScope.$apply(getTrackLink());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48486171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档