Javascript AngularJS组件模式在承诺后未更新

Javascript AngularJS组件模式在承诺后未更新,javascript,angularjs,angular-ui-router,components,angular-promise,Javascript,Angularjs,Angular Ui Router,Components,Angular Promise,我创建了一个带有组件的示例angular js应用程序,并尝试从API加载数据,这是一个承诺 这里的问题是,当承诺得到解决时,响应数据没有在UI中更新,如果执行$scope.$apply(),则Modal正在更新。我尝试了$onChanges,但也没用 这不是正确的实现,对吗?请提供有关我的代码结构和此问题的说明 我是不是错过了蚂蚁? angular.module('detailapp',['ui.router'])) .component('app'{ 模板:` ` }) .config(函数

我创建了一个带有组件的示例angular js应用程序,并尝试从API加载数据,这是一个承诺

这里的问题是,当承诺得到解决时,响应数据没有在UI中更新,如果执行
$scope.$apply()
,则Modal正在更新。我尝试了$onChanges,但也没用

这不是正确的实现,对吗?请提供有关我的代码结构和此问题的说明

我是不是错过了蚂蚁?
angular.module('detailapp',['ui.router']))
.component('app'{
模板:`
`
})
.config(函数($stateProvider,$urlRouterProvider){
$urlRouterProvider。否则('/');
//主页或默认页
$stateProvider.state('home'{
url:“/”,
模板:“主页”
});
//详细信息,带id
$stateProvider.state('detail'{
url:“/:id”,
模板:“”
});
})
.service('endPointService',['$q','$http',函数($q,$http){
返回{
getDetailUrl:函数(id){
返回'https://api.github.com/users/“+id;
},
get:函数(url、参数){
返回新承诺(功能(解决、拒绝){
$http.get(
网址{
params:params
}
).然后(功能(res){
决议(res);
}).catch(函数(err){
拒绝(错误);
});
});
}
}
}])
.factory('listService',['endPointService',函数listService(endPointService){
让serviceInstance={};
serviceInstance.getDetail=函数(Id){
return endPointService.get(
endPointService.getDetailUrl(Id)
)。然后((res)=>{
返回res.data;
});
};
返回serviceInstance;
}])
.component('detailComponent'{
模板:`
详细信息组件:ID-{vm.ID}
名称
{{vm.obj.name}
跟随
{{vm.obj.followers\u url}
`,
控制器:['$scope','$stateparms','listService',function detailController($scope,$stateparms,listService){
让vm=这个;
vm.id=$stateParams.id;
vm.obj={};
vm.$onInit=函数(){
/*init上的控制器*/
vm.getDetails();
log(`onInit${JSON.stringify(vm.obj)}`);
};
//vm.$onChanges=函数(更改){
//log(`onChanges${JSON.stringify(vm.obj)}${JSON.stringify(vm.changes)}`);
////如果(changes&&angular.isUndefined(changes.obj.previousValue)&&angular.isDefined(changes.obj.currentValue)){
////console.log('更改模式'+changes);
////vm.obj=changes.obj.currentValue;
//     // }
// };
vm.getDetails=函数(){
getDetail(vm.id).then(res=>{
vm.obj=res;
$scope.$apply();
log(`api调用${JSON.stringify(vm.obj)}`);
});
};
}],
controllerAs:'vm'
});

应用程序正在这里加载。。。!

在您的服务中,无需创建自定义承诺,因为$http return会产生一个承诺。只需返回请求

.service('endPointService', ['$q', '$http', function ($q, $http) {
        return {
            getDetailUrl: function (id) {
                return 'https://api.github.com/users/' + id;
            },
            get: function (url, params) {
                return $http.get(url)
            }
        }
    }])
在工厂,再次返回服务方法,而不是在那里拆开承诺

.factory('listService', ['endPointService', function listService(endPointService) {
        let serviceInstance = {};
        serviceInstance.getDetail = function (Id) {
            return endPointService.get(endPointService.getDetailUrl(Id))
        };
        return serviceInstance;
    }])

在您的服务中,不需要创建自定义承诺,因为$http return会产生一个承诺。只需返回请求

.service('endPointService', ['$q', '$http', function ($q, $http) {
        return {
            getDetailUrl: function (id) {
                return 'https://api.github.com/users/' + id;
            },
            get: function (url, params) {
                return $http.get(url)
            }
        }
    }])
在工厂,再次返回服务方法,而不是在那里拆开承诺

.factory('listService', ['endPointService', function listService(endPointService) {
        let serviceInstance = {};
        serviceInstance.getDetail = function (Id) {
            return endPointService.get(endPointService.getDetailUrl(Id))
        };
        return serviceInstance;
    }])

你的例子有用吗?请先把它修好。如何进入
详细信息
?您的示例有效吗?请先把它修好。如何查看
详细信息
?我不确定在$http上添加
承诺
的问题是什么,现在问题已经解决了。你能告诉我吗?我不确定在$http上添加
承诺的问题是什么,问题现在已经解决了。你能