首页 > angularjs服务改变,controller里面不同步改变

angularjs服务改变,controller里面不同步改变

创建了一个服务,打算在下面的几个controller里面公用这个服务,服务里面有默认的配置,然后还会从服务器通过ajax获取配置,但是获取的配置以后controller里面没有同步改变,页面上对应的内容也没有改变。
以下是服务代码:

var home=angular.module("Home",['ui.codemirror']);
//公共服务
home.factory("FormItem",function($http,$location){
    var items= {
        uniqueId:"",
        title:"",
        description:"",
        dtd:3,
        jsFramework:0,
        extraJs:[],
        extraJsUrlArr:[],
        html:"",
        js:"",
        css:""
    };
    var path=$location.$$absUrl.replace("http://"+$location.$$host+"/","");
    if(path!=""){
        $http.get("/api/get_fiddle/index/"+path).success(function(data){
            items=data;
            return items;
        });
    }
    return items;
});

具体网址为:http://jsfiddle.sinaapp.com/dvxr54cxsv。代码在home.js里面。想使用$watch监听,最终也没有弄成。


已解决。创建了一个大的controller,然后把ajax的内容放到里面,然后通过$broadcast发送给了下面的controller。直接使用service的方法还是没有找到。


controller不应该“大”
你这属于js的基础问题, 建议你先把js的异步概念搞清楚

嗯,你这整个应用只有一个页啊。一开始还有点误会,看来不光是异步,LZ你还该把对象的引用概念弄清楚。这就是另外一个问题了。唉,这里先照先前的思路来吧。
按照LZ给的页面稍微改了下

home.factory("FormItem",function($q, $http){
    var item = {};
    var deferred;
    var getItem = function(path) {
        //请求过就不再请求了
        if(deferred) {
            return deferred.promise;
        }
        deferred = $q.defer();
        if(path!="") {
            $http.get("/api/get_fiddle/index/"+path).success(function(data){
                deferred.resolve(data);
            });
        } else {
            deferred.resolve(item);
        }
        return deferred.promise;
    }
    return {
        getItem: getItem
    };
});

唉感觉越改越傻了 OTZ,不过难以理解LZ整个页面思路就先这样把

如果是js新手的话,不建议直接从angular入手学习

【热门文章】
【热门文章】