【问题标题】:VisualForce Remoting not working with Separate AngularJS Controller FileVisualForce Remoting 不适用于单独的 AngularJS 控制器文件
【发布时间】:2016-01-05 12:09:10
【问题描述】:

我在使用 Visualforce 远程处理和 angularjs 时遇到了问题。每当我将控制器代码放在单独的 js 静态资源中时,我的代码都不起作用。请帮我解决这个问题。

我的 Visualforce 页面

    <apex:page controller="ApexRemoteActionPageController" docType="html-5.0">
<html>
<body>
 <div class="bootstrap" ng-app="ngApp" ng-controller="ContactCtrl" >

 <h1 align="center">Click The Button</h1>
 <button ng-click="getContacts()" class="btn btn-lg btn-default btn-block">Get Contacts</button> 

 <p>
 <ul>
 <li id="{{current.Id}}" ng-repeat="current in contacts" ng-class-even="'rowEven'">{{current.Name}}</li>
 </ul>
 </p>
</div>
<apex:stylesheet value="//cdn.jsdelivr.net/webjars/bootstrap-sf1/0.1.0-beta.6/css/bootstrap-namespaced.css"/>
 <apex:includeScript value="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.11/angular.min.js"/>
 <apex:includeScript value="{!$Resource.ContactCtrl}" />
</body>
</html>
</apex:page>

我的控制器静态资源

    <script>
var ngApp= angular.module("ngApp", []); 
 ngApp.controller("ContactCtrl", ["$scope", function($scope) 
                                 {
                                  $scope.contacts = [];
                                  $scope.getContacts = function() {
               ApexRemoteActionPageController.myContacts(function(result, event) {
               $scope.contacts = result;
               $scope.$apply();
});
}
}]);
</script>

我的 Apex 控制器

global class ApexRemoteActionPageController {
@RemoteAction
global static List<Contact> myContacts() 
{
   return [select id, name, email from Contact Order By LastModifiedDate DESC LIMIT 30];
}  

}

每当我将控制器逻辑放在同一个 Visual Force 页面中时,它都可以工作,但是当我将控制器脚本移动到单独的 js 静态资源时,它不会。

【问题讨论】:

    标签: angularjs salesforce visualforce


    【解决方案1】:

    您的控制器静态资源是一个 Javascript 文件,因此不需要 &lt;script&gt; 标记。删除这些,我相信您的静态资源会按预期工作。

    更多细节:如果你在你的 js 文件中使用&lt;script&gt; 标签,你最终会得到嵌套脚本标签的标记,我认为这对你不起作用。这是因为&lt;includeScript&gt; 呈现为 HTML 标记中的脚本标记。

    【讨论】:

      【解决方案2】:

      我终于找到了答案。是的,部分问题是在需要删除的静态资源中使用&lt;Script&gt; 标记,但真正的问题是在进行远程调用时没有在控制器之前放置命名空间前缀。

      ApexRemoteActionPageController.myContacts(函数(结果,事件)

      需要

      命名空间前缀。 ApexRemoteActionPageController.myContacts(function(result, event)

      在开发者版中默认不会设置命名空间前缀,我们必须导航到 .... 开发帐户左侧的搜索栏并搜索 create package ...go to packages 并启用 Managed package 选项。 ..这将使我们可以选择为我们的整个帐户(classes.controllers...等)设置名称空间前缀,然后进入javascript静态资源并将您的名称空间放在controller.methodname之前,就是这样..

      【讨论】:

        猜你喜欢
        • 2015-12-27
        • 2014-07-30
        • 1970-01-01
        • 2015-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多