angularjs服务中的返回值

时间:2016-06-08 12:27:39

标签: angularjs

我有两种在AngularJS中使用服务返回值的情况。

案例1.如果我使用下面的代码,它的工作正常

var SerFactProv = angular.module("SerFactProv", [])
.service('ServiceDemo', function () {
    return { fn: "1452522" };
})
.controller("sfpCtrl", function ($scope, ServiceDemo, FactoryDemo, ProviderDemo) {
    $scope.serviceResult = "This is form service : " + ServiceDemo.fn
});

HTML:

<body ng-app="SerFactProv">
    <div ng-controller="sfpCtrl">
        <p>{{serviceResult}}</p>    <br />
    </div>
</body>

案例2.但如果我在角度表达式中使用.fn代替控制器输出消失。请在两个代码中查看.fn的差异,并解释其发生的原因。

$scope.serviceResult = "This is form service : " + ServiceDemo

并在用户界面上

<p> {{serviceResult.fn}} </p>    <br />

4 个答案:

答案 0 :(得分:2)

此代码

$scope.serviceResult = "This is form service : " + ServiceDemo

和HTML:

<p> {{serviceResult.fn}} </p>

没有任何意义。

ServiceDemo是一个对象。字符串和任何东西的连接也将是字符串。任意字符串都没有fn属性。因此未定义的结果。

答案 1 :(得分:0)

只是提示,服务不应该被用来返回一个对象,它会被angular的核心实例化一次然后缓存,所以在服务配方中你应该用关键字来引用这个,因为它是一个构造函数:

 .service('ServiceDemo', function ()
{
   this.fn =  "1452522";
})

答案 2 :(得分:0)

你的第二种情况不起作用的原因是你将<?php $isOK = true; // Check if POST parameter destination is set and it is not blank, you // can repeat this validation with all your parameters, changing // destination by its name. if (!isset($_POST['destination']) || trim($_POST['destination']) == '') { $isOK = false; } if ($isOK) { echo "+OK"; } 的值设置为字符串,而字符串没有属性.fn

如果将$scope.serviceResult设置为serviceDemo(服务本身),它将起作用。我已经用你的代码做了一个例子,这应该解释不同之处:jsFiddle

答案 3 :(得分:0)

如果您想从角度服务使用&#39; 工厂 &#39;返回对象。而不是服务。

<强>工厂:

.factory('ServiceDemo', function () {
    return { fn: "1452522" };
})

控制器:

.controller("sfpCtrl", function ($scope, ServiceDemo, FactoryDemo, ProviderDemo{
    $scope.serviceResult = "This is form service : " + ServiceDemo.fn
});

有关服务,工厂和提供商之间的差异,请参阅here