小编tes*_*123的帖子

AngularJS:使用异步数据初始化服务

我有一个AngularJS服务,我想用一些异步数据进行初始化.像这样的东西:

myModule.service('MyService', function($http) {
    var myData = null;

    $http.get('data.json').success(function (data) {
        myData = data;
    });

    return {
        setData: function (data) {
            myData = data;
        },
        doStuff: function () {
            return myData.getSomeData();
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

显然这不会起作用,因为如果某些东西doStuff()myData返回之前尝试调用,我将得到一个空指针异常.据我所知,从这里这里提出的其他一些问题,我有几个选择,但没有一个看起来很干净(也许我错过了一些东西):

使用"运行"设置服务

设置我的应用时,请执行以下操作:

myApp.run(function ($http, MyService) {
    $http.get('data.json').success(function (data) {
        MyService.setData(data);
    });
});
Run Code Online (Sandbox Code Playgroud)

然后我的服务看起来像这样:

myModule.service('MyService', function() {
    var myData = null;
    return {
        setData: function (data) {
            myData = data;
        },
        doStuff: function () {
            return myData.getSomeData();
        } …
Run Code Online (Sandbox Code Playgroud)

javascript service asynchronous angularjs angular-promise

472
推荐指数
7
解决办法
21万
查看次数

从角度打开jquery对话框的最佳实践是什么?

继承人html:

<div ng-controller="MyCtrl">
    <a ng-click="open()">Open Dialog</a>
    <div id="modal-to-open" title="My Title" ui-jq="dialog" ui-options="{width: 350, autoOpen: false, modal: true}">
        Dialog Text
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是js:

function MyCtrl($scope) 
{
    $scope.open = function () {
        $('#modal-to-open').dialog('open');
    }
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?似乎有一种更好的方法可以在不访问DOM的情况下打开它,但我不确定如何去做.上面的代码工作,我只是想知道这是否是我应该这样做的方式.欢迎任何输入.

jquery-ui jquery-ui-dialog angularjs

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

将jpa实体转换为宁静资源的好策略是什么?

Restful资源并不总是与您的jpa实体进行一对一映射.我认为有一些问题我想弄清楚如何处理:

  1. 当资源具有由多个实体填充和保存的信息时.
  2. 当实体中有更多信息要作为资源发送时.我可以使用杰克逊,@JsonIgnore但我仍然会有问题1,3和4.
  3. 当实体(如聚合根)具有嵌套实体并且您希望包含其嵌套实体的一部分但仅包含某个级别的嵌套作为您的资源时.
  4. 当您想要将一个实体的一部分排除在一个父实体的一部分时,但当它的一部分是另一个父实体时排除一个单独的部分.
  5. Blasted循环引用(我得到的主要是使用Jackson的JSOG@JsonIdentityInfo)

可能的解决方案: 我能想到的唯一方法是处理所有这些问题,就是创建一大堆"资源"类,这些类将具有构造函数,这些构造函数需要实体来构建资源并为此放置必要的getter和setter.资源就可以了.那有点矫枉过正吗?

为了解决2,3,4和5,我可以在将它发送给Jackson以将我的pojo序列化或反序列化为JSON之前对实际实体进行一些预处理和后处理,但这并不能解决问题1.

这些都是我认为其他人会遇到的问题,我很好奇其他人提出的解决方案.(我目前正在使用JPA 2,Spring MVC,Jackson和Spring-Data,但对其他技术开放)

java rest jpa jackson

26
推荐指数
2
解决办法
6843
查看次数

Angular服务应该有州吗?

最近,我和一些同事正在讨论AngularJS服务是否应该有州.我们提出了一些支持和反对的论据,我希望得到关于这个主题的更多想法和反馈.在我的搜索中,我发现了这一点,但似乎没有提到任何明确的最佳实践.在无客户端的世界中,服务永远不应该保持状态,但我开始认为它可能是客户端可接受的,因为它是一个不同的问题.

服务持有状态的原因:

  1. 多个线程不会访问该服务.每个浏览器都有自己的服务实例.
  2. 允许服务仅保留其关心的状态,而不是将其存储在rootScope中.包囊

服务不成立的原因:

  1. 服务不再是幂等的.调用函数可能会更改状态,因此在根据服务状态调用它时可能会有不同的结果.
  2. 我认为总的来说这会更容易测试.

可能在"for services holding state"部分中解决#2的一种方法是在rootScope上设置包含应用程序当前状态的appState对象.然后将所有州聚集在一个位置,然后您只需在服务中提取所需的内容.我发现了这个并且想知道

service state angularjs

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

在序列化对象时,如何强制Jackson将数字写为字符串

我的一个java对象上有一个非常大的id.当它将jackson转换为JSON时,它会将其作为数字发送(例如{"id":1000110040000000001})但是一旦它成为javascript对象,id就会变为1000110040000000000.我在这里读到了这个问题

当id较小时,它工作正常.我的第一个想法是强迫杰克逊将所有数字转换成字符串,但我也对其他选项持开放态度.如果可能的话,我宁愿不将Jackson注释添加到我的java对象中.

javascript java json jackson

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

如何使用路径变量而不是使用AngularJS $资源的请求参数

可能有一种简单的方法可以做到这一点,但我似乎无法找到方法.

当我点击下面显示的删除按钮时,角度会点击以下网址:

http://localhost:8080/rest/managedCourse?id=3
Run Code Online (Sandbox Code Playgroud)

我如何让它来传递路径变量而不是像这样的请求参数:

http://localhost:8080/rest/managedCourse/3
Run Code Online (Sandbox Code Playgroud)

继承人我的HTML:

<table>
    <tr ng-repeat="course in page.content">
        <td>{{course.title}}</td>
        <td>{{course.description}}</td>
        <td>{{course.creditValue}}</td>
        <td><button ng-click="remove(course.id)">Delete</button></td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

function ManagedCourseController($scope, $resource) 
{
    var ManagedCourse = $resource("rest/managedCourse/:courseId", {courseId:'@id'});

    $scope.page = ManagedCourse.getPage({"page.page": "0", "page.size": "3", "page.sort": "title", "page.sort.dir": "asc"});


    $scope.create = function (managedCourse) {
        ManagedCourse.create(managedCourse);
    }

    $scope.remove = function (courseId) {
        ManagedCourse.remove({id:courseId});
    }
}
Run Code Online (Sandbox Code Playgroud)

rest resources path-variables angularjs

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

使用JPA entityManager时,为什么在删除之前必须合并?

有一段时间我一直在想为什么在使用JPA时,我是否必须编写我的删除方法:

@Transactional
public void delete(Account account)
{
    if (entityManager.contains(account))
    {
        entityManager.remove(account);
    }
    else
    {
        entityManager.remove(entityManager.merge(account));
    }
}
Run Code Online (Sandbox Code Playgroud)

也许不需要包含,因为事务以此方法开始和结束,但我仍然想知道为什么删除不能只是取一个非托管对象.是因为需要对其进行管理才能知道该对象的id是什么?任何其他见解都会很棒.我只是想了解JPA删除的方法和原因.

merge jpa entitymanager jpa-2.0

9
推荐指数
1
解决办法
6379
查看次数

使用xsl变量来捕获调用模板的输出,为我返回空白

我看过很多帖子都做了这样的事情,这让我觉得这是可能的,我只是做错了什么.我尽可能简化了它,试图弄清楚为什么会发生这种情况:

继承人我的xml(没什么好激动的):

<?xml version="1.0" encoding="UTF-8"?>
<REPORT>

</REPORT>
Run Code Online (Sandbox Code Playgroud)

这是我的xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="REPORT">
      <xsl:variable name="tryThisTemplate">
        <xsl:call-template name="TRY_THIS"/>
      </xsl:variable>
      <TEST1>
        <xsl:call-template name="TRY_THIS"/>
      </TEST1>
      <TEST2>
        <xsl:value-of disable-output-escaping="yes" select="$tryThisTemplate" />
      </TEST2>
      <TEST3>
        <xsl:value-of select="$tryThisTemplate" />
      </TEST3>
    </xsl:template>

    <xsl:template name="TRY_THIS">
      <MY_NODE desc="my description" />
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

<?xml version="1.0" encoding="utf-8"?>  
<TEST1>
  <MY_NODE desc="my description"/>
</TEST1>
<TEST2></TEST2>
<TEST3></TEST3>
Run Code Online (Sandbox Code Playgroud)

这是我的问题:为什么TEST2和TEST3不起作用.$ tryThisTemplate变量似乎为空.我在这里误解了什么.我应该以不同的方式做这件事吗?

xml xslt transform

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

存储库是否应通过传入id或实体本身来删除/删除实体

我目前正在创建一个存储库,并想知道实体的删除操作的"最佳实践"是什么.在下面的选项中,make和model构成Car实体的键.

选项1:

deleteCar(Car car)
Run Code Online (Sandbox Code Playgroud)

选项2:

deleteCar(String make, String model)
Run Code Online (Sandbox Code Playgroud)

选项3:

deleteCar(CarKey carKey)
Run Code Online (Sandbox Code Playgroud)

起初我认为选项1,但在实践中选项2似乎更吸引人(我不想得到一个对象,当我只有id只是为了我可以将它传递给删除方法).我把选项3放在一边,因为我已经看过类似的东西,但这对我来说似乎不对,因为CarKey实际上并不是一个域对象.

思考?

domain-driven-design repository

8
推荐指数
1
解决办法
992
查看次数

当使用选项组时,如何使用Angular UI正确初始化Select2标签?

我一直试图让我的角度ui select2指令初始化,并且无法让它与选项组一起使用.

代码:

function testCtrl1($scope)
{
    $scope.selectedOptions = ['1'];
    $scope.categories = [
            {label: 'cat1', options: [{desc: 'one', value: 1}]}, 
            {label: 'cat2', options: [{desc: 'two', value: 2}]}
    ];
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<select multiple ui-select2 ng-model="selectedOptions" style="width: 300px">
    <optgroup ng-repeat="category in categories" label="{{category.label}}">
      <option ng-repeat="option in category.options" value="{{option.value}}">{{option.desc}} - {{option.value}}</option>
    </optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)

小提琴: 我创造了以下的jsfiddle.

虽然这样做我注意到如果我包含第二个不包含选项组的select2指令(奇怪),它将正确初始化.当我包括第二个select2时,我注意到其他一些奇怪的行为,但我并不太关心它,因为我的目标只是让testCtrl1工作.

angularjs jquery-select2 angular-ui

8
推荐指数
1
解决办法
7690
查看次数