相关疑难解决方法(0)

AngularJS:控制器范围不会与promise同步

我已经选择了一个项目,我正在尝试将一些数据从服务返回到我的控制器.我已经在这里待了大约12个小时,并尝试了不同的方法.它们通常都会产生同样的"缺失数据".

我试过了

  • 使用$ resource而不是$ http
  • $http.get右侧放在控制器内而不使用promises
  • 服务作为实际服务(而不是工厂)没有返回
  • 建立工厂的一系列不同方式以各种格式返回数据
  • 使用setTimeout和$ apply

我觉得我现在所拥有的是一个简单的,因为我可以得到它,而我所读到的一切都说这应该有效

angularjs的负载数据从服务

角控制器斜面-GET-数据从服务

angularjs - 承诺 - 不烧时,返回-从一种服务

angularjs - 承诺 - 不解决,适当

angularjs-承诺

这些链接就是从今天开始的.

我认为可能存在$ scope问题,因为过去我已经看到$ scopes在使用多个控制器时没有获取数据,但是该站点只是在index.html中声明一个控制器作为<body ng-app="myApp" ng-controller="BodyCtrl">设置.主app.js使用状态(我认为来自ui-router)就像这样......

.state('app.view', {
    url: '/view',
    templateUrl: 'views/view.tpl.html',
    controller: 'MyCtrl'
   })
Run Code Online (Sandbox Code Playgroud)

将控制器连接到不同的页面.此外,该网站还有一些其他控制器从服务中获取数据,我首先将其作为模板查看,然而,数据和返回比我想要的更复杂.但最重要的是,控制器正在访问服务提供的数据.他们都使用$ resource,这就是我从这个问题开始的方式.我坚持使用$ http因为它应该可以工作,而且我希望在我进入"更高级别"的东西之前使用它.另外,我只需要从端点获取GET,所以觉得$ resource太过分了.

服务

.factory('MyService', ['$http', '$q', '$rootScope', function ($http, $q, $rootScope) {
    var defer = $q.defer();
    var factory = {};
    factory.all = function () {
        $http({method: 'GET', url: 'http://URLtoJSONEndpoint'}). …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service angularjs-scope angularjs-controller angularjs-http

6
推荐指数
1
解决办法
8113
查看次数

Angular 模板调用函数可以返回承诺吗

Angular 的 $q 文档说“$q 承诺被 angular 中的模板引擎识别,这意味着在模板中,您可以将附加到范围的承诺视为结果值。”

Angular 的视图模板还允许您评估表达式,这意味着您可以调用从作用域公开的函数。

我发现视图模板能够引用真实值、承诺(最终解析为真实值)或返回真实值的函数,但不能引用返回承诺的函数,它们总是呈现{}到视图模板中。

用这个例子创建了一个小提琴

谁能做得更好或引导我朝着正确的方向前进?

(也许在视图模板中使用函数是个坏主意;这种技术还有其他问题,因为 Angular 观察函数无法在不调用函数的情况下判断它是否发生了变化,所以被观察的函数在每个摘要周期都会被评估。我已经看到这两个 问题,并且在这两个问题中,推荐的答案是使用 promise.then 来更改作用域上的正常属性,并让视图模板监视正常属性而不是 promise。我明白了,但是对于我的使用,我想提供一些参数来计算一个值,并且直接在视图模板中提供这些参数很方便。基本上我试图在FlaskRails 中编写类似 url_for 的东西。)

javascript promise angularjs

5
推荐指数
1
解决办法
1万
查看次数

AngularJs $ q.defer()不起作用

我遇到了一些问题$q.defer();
当我使用回调时,我的代码正在运行(视图已更新),但$q.defer();事实并非如此.

这是我的代码:
服务:

eventsApp.factory('eventData', function($http, $q) {
    return {
        getEvent: function(callback) {
            var deferred = $q.defer();
            $http({method: 'GET', url: '/node/nodejsserver/server.js'}).
                success(function(data, status, headers, config){
                    //callback(data.event);
                    deferred.resolve(data.event);
                    console.log('status: ', status, ' data: ', data);
                }).
                error(function(data, status, headers, config){
                    deferred.reject(status);
                    console.log('status: ', status);
                });
            return deferred.promise;
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

控制器:

eventsApp.controller('EventController', 
    function EventController($scope, eventData) {
        $scope.event = eventData.getEvent();
    }
);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

然后我找到了这个答案,我更新了我的控制器,如下所示:

eventsApp.controller('EventController', 
    function EventController($scope, eventData) {
        eventData.getEvent().then(function(result) { …
Run Code Online (Sandbox Code Playgroud)

javascript promise angularjs

5
推荐指数
1
解决办法
8225
查看次数

将复选框绑定到AngularJs中的对象值

问题在于将复选框(已选中/未选中)的状态绑定到对象值.

HTML:

<div ng:controller="Ctrl"> 
   <div ng:repeat="(letter, number) in obj">
     {{letter}} and {{number}}
     <input type="checkbox" ng:model="obj[letter]">
</div>    
Run Code Online (Sandbox Code Playgroud)

控制器:

function Ctrl() {
    this.obj = {a:true,b:true};    
};?
Run Code Online (Sandbox Code Playgroud)

单击第一个复选框时,它会影响第二个复选框的状态,但模型是正确的,因此obj变为{a:false,b:true}.

示例可以在http://jsfiddle.net/alexpetrov/tRxzr/找到

如何解决这个问题?

javascript angularjs

2
推荐指数
1
解决办法
1万
查看次数