小编Cam*_*all的帖子

AngularJS:工厂和服务?

编辑2016年1月:由于这仍然备受关注.自从问这个我已经完成了一些AngularJS项目,并且对于那些我最常用的项目factory,构建了一个对象并在最后返回了对象.我下面的语句是仍然如此,但是.

编辑:我想,我终于明白了两者之间的主要区别,和我有一个代码示例演示.我也在想这个问题所提出的重复不同.重复的说,服务不是实例化,但如果你将其设置为我下面演示,它实际上是.服务可以被设置为是完全一样的工厂.我还将提供显示工厂故障服务的代码,这似乎没有其他答案.

如果我成立VaderService像这样(即服务):

var module = angular.module('MyApp.services', []);

module.service('VaderService', function() {
    this.speak = function (name) {
        return 'Join the dark side ' + name;
    }
});
Run Code Online (Sandbox Code Playgroud)

然后在我的控制,我可以这样做:

module.controller('StarWarsController', function($scope, VaderService) {
    $scope.luke = VaderService.speak('luke');   
});
Run Code Online (Sandbox Code Playgroud)

通过服务,注入到控制器的VaderService被实例化,所以我可以调用VaderService.speak,但是,如果我将VaderService更改为module.factory,控制器中的代码将不再起作用,这是主要区别.随着工厂,VaderService注入到控制器实例化,这就是为什么你需要设立一家工厂(见我的问题为例)返回一个对象.

但是,您可以设置在完全相同的方式服务,你可以建立一个工厂(IE有它返回一个对象)和服务的行为完全一样作为一个工厂

鉴于此信息,我认为没有理由使用工厂超过服务,服务可以做任何工厂可以做的更多.

下面原来的问题.


我知道这已经被问的时候加载,但我实在看不出工厂和服务之间的功能差异.我读过这个教程:http://blogs.clevertech.biz/startupblog/angularjs-factory-service-provider

它似乎给一个合理的很好的解释,但是,我设立了我的应用程序如下:

的index.html

<!DOCTYPE html>
<html>
    <head>
    <title>My App</title>
    <script src="lib/angular/angular.js"></script>
    <script type="text/javascript" src="js/controllers.js"></script>
    <script type="text/javascript" src="js/VaderService.js"></script>
    <script type="text/javascript" src="js/app.js"></script>
    </head>

    <body ng-app="MyApp"> 
        <table ng-controller="StarWarsController">
            <tbody>
            <tr><td>{{luke}}</td></tr>
            </tbody>
        </table> …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-service angularjs-factory

213
推荐指数
3
解决办法
24万
查看次数

如何导出此函数的类型:

我正试图在打"类型俄罗斯方块"方面做得更好.我有这些功能:

(=<<) :: Monad m => (a -> m b) -> m a -> m b
zip :: [a] -> [b] -> [(a, b)]
Run Code Online (Sandbox Code Playgroud)

而GHCi告诉我:

(zip =<<) :: ([b] -> [a]) -> [b] -> [(a, b)]
Run Code Online (Sandbox Code Playgroud)

我很难搞清楚如何从前两个签到最终签名.我的直觉(由于缺乏一个更好的词)是说的第一个参数=<<,即a -> mb以某种方式对和解的签名zip,然后将其都应该从脱落.但我无法理解如何实现这一飞跃.它可以分解为一系列易于遵循的步骤吗?

haskell types composition

14
推荐指数
2
解决办法
662
查看次数

合并提交有什么问题?

我看到很多问题,人们在问这怎么可以避免"毫无意义"的合并提交.

合并提交到底有什么不好?我觉得它们很有用,因为你可以确切地看到两个开发人员开始工作的地方,以及工作合并在一起的地方.正如许多答案所暗示的那样,看起来像变基,破坏了这些信息并且你失去了很多项目的历史.

有什么我错过了使合并提交不受欢迎吗?

git git-merge git-rebase

10
推荐指数
1
解决办法
3118
查看次数

为什么PHP需要使用运算符来关闭?

我知道有什么用运营商在做的东西像function($x,$y) use ($z) { ...

我不明白为什么 PHP在其他语言不使用时使用这种结构?

php closures

7
推荐指数
1
解决办法
172
查看次数

Eclipse XML插件中禁用了"缩进大小"

当我在eclipse中编辑XML文件时,我希望标签为4个空格.我知道该去哪里更改,但该选项已被禁用.请参阅附带的屏幕截图

在此输入图像描述

如何让它让我把它设置为4?

eclipse eclipse-plugin

6
推荐指数
2
解决办法
374
查看次数

只应通过引用传递变量

我有一节课:

class Validator {
    private $validationArray;
    private $cleanedValues;

    public function __construct($arg1, $arg2=NULL) {
        if(empty($arg2)) {
            $this->LoadValidatorByName($arg1);
        } else {
            $this->LoadValidatorFromLeadType($arg1, $arg2);
        }
    }

    private function LoadValidatorFromLeadType($lead_type, $vocabulary) {
            $ErrorReporter = new ErrorReporter;
            $taxonomy_term = reset(taxonomy_get_term_by_name($lead_type, $vocabulary));

...some more stuff
Run Code Online (Sandbox Code Playgroud)

函数taxonomy_get_term_by_name是一个Drupal函数,但我遇到的问题是PHP问题.

调用此方法时,PHP会抱怨:

Strict warning: Only variables should be passed by reference in Validator->LoadValidatorFromLeadType() (line 32 of [path to my file])
Run Code Online (Sandbox Code Playgroud)

第32行是:

$taxonomy_term = reset(taxonomy_get_term_by_name($lead_type, $vocabulary));
Run Code Online (Sandbox Code Playgroud)

我已经查看了错误,我很确定我知道这意味着什么,但我无法理解导致此警告的代码有什么问题.

php class

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

如何构建MVC应用程序作曲家风格?

我正处于制作MVC Web应用程序的最初阶段.我想尝试做作曲家风格的事情.到目前为止,这是我的目录结构:

public_html
    |-vendor
    |   |-MyVendorName
    |   |   |-DomainObjectClass.php
Run Code Online (Sandbox Code Playgroud)

这就是我存储域对象的地方.

我也试图尽可能接近MVC来回答这个问题

我有点卡住的地方是模型,控制器,视图,服务,DataMappers等的位置.我应该创建MyVendorName的子目录(例如MyVendoreName/DomainObjects/DomainObjectClass.php和MyVendorName/Services/SomeServiceClass.php等)或者它是否更明智地将目录与供应商称为类或src或其他东西分开并在那里做MVC的东西?

编辑:每个人都说供应商是第三方库,我明白了.但是我编写域对象的方式与MVC方面非常分离.事实上,他们甚至不知道他们是MVC应用程序的一部分.它们很容易在其他项目中重复使用(我打算这样做).所以把它放在src /或app /中似乎不合逻辑

php composer-php

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

为什么这个简单的bash正则表达式不会返回true?

如果我[[ "0" =~ "^[0-9]+$" ]] && echo hello在终端上做,我希望看到"你好"这个词

但是,什么都没有打印.我究竟做错了什么?

regex bash

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

为什么这个实现无效?

假设我有以下类型签名:

someFunction :: (Eq a, Eq b) => a -> b
Run Code Online (Sandbox Code Playgroud)

实施:

someFunction x = (2 :: Int)
Run Code Online (Sandbox Code Playgroud)

(不要把它放得太远,这只是一个例子).

我对签名的理解是" someFunction接受一个作为Eq类型类的实例的参数,并返回一个值(可以是不同类型),它是Eq类型类的实例".Int是一个实例Eq,为什么GHC对这个实现感到不安?

这个错误很明显:

Couldn't match expected type ‘b’ with actual type ‘Int’
     ‘b’ is a rigid type variable bound by
       the type signature for:
         someFunction :: forall a b. (Eq a, Eq b) => a -> b
Run Code Online (Sandbox Code Playgroud)

我想我不明白的是它要求"forall" b.使用这个函数的任何代码都应该只依赖于b一个实例Eq,对吧?在我看来,实现确实符合签名.我的实施怎么样打破了这个签名的期望?

haskell types compiler-errors typeclass parametric-polymorphism

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

在bash脚本中使用Unix域套接字的最佳方法

我正在研究一个使用Unix域套接字的简单bash脚本守护进程.我有一个像这样的循环:

#!/bin/bash
while true
do
    rm /var/run/mysock.sock
    command=`nc -Ul /var/run/mysock.sock`
    echo $command > /tmp/command
done
Run Code Online (Sandbox Code Playgroud)

我正在回应/ tmp/command的命令只是为了调试目的.

这是最好的方法吗?

sockets bash

4
推荐指数
1
解决办法
8090
查看次数