我有两种在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 />
答案 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