【问题标题】:value wont pass to controller from provider angularjs值不会从提供者 angularjs 传递给控制器
【发布时间】:2014-01-30 23:30:33
【问题描述】:

所以我有一个控制器和一个提供程序,我试图将一个值从提供程序传递给控制器​​,没什么太复杂的。我已经通过了几个关于此的 tuts 和论坛主题,但没有 e=suggestions 有效。最糟糕的是,我的控制台也没有出现任何错误,只是一个空白页。我确信这是我缺少的一些愚蠢的小东西,但我很难过。

   var app = angular.module('myApp', ['ngRoute']);

   app.controller('SettingsCtrl', function($scope, Stocks) {
        $scope.stock = Stocks;
   });

app.provider('Stocks', function() {
    this.name = 'some name';
    this.$get = function() {
        this.name = 'Ford Motors'
        return this.name;
    };
});

app.config(function($routeProvider) {
$routeProvider
    .when('/settings', {
        templateUrl: 'templates/settings.html',
        controller: 'SettingsCtrl'
    })
    .otherwise({redirectTo: '/'});
  });

HTML

<!doctype html>
<html data-ng-app="myApp" data-ng-csp="">
    <head>
        <meta charset="UTF-8">
        <title>Presently</title>
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <link rel="stylesheet" href="css/main.css">
    </head>
    <body>
        <div ng-view></div>
        <script src="js/angular.js"></script>
        <script src="js/angular-route.js"></script>
        <script src="js/app.js"></script>
    </body>
</html>

settings.html

<div class="container">
     <div class="stock_name">{{stock.name}}</div>
</div>

【问题讨论】:

  • 试试app.controller('SettingsCtrl',['$scope','Stocks', function($scope, Stocks){}])
  • @PatrickEvans 这只会导致缩小代码出现问题,但即便如此它也会引发错误(未知提供者)。
  • @IlanFrumer "使用内联括号表示法,它将要注入的函数包装到一个字符串数组中(代表依赖项名称),然后是要注入的函数:" a note about minification 至于可能是真的未知提供者,我认为它们会像指令和服务一样被包含进来

标签: javascript angularjs model-view-controller controller


【解决方案1】:

查看您的 Stocks 提供商

app.provider('Stocks', function() {
    this.name = 'some name';
    this.$get = function() {
        this.name = 'Ford Motors'
        return this; //<-----instead of 'this.name'
    };
});

因为this.name 总是返回name 而不是Stocks object。现在你的表达式 {{stock.name}} 将会计算。

【讨论】:

  • 原来如此!非常感谢
【解决方案2】:

你应该使用ngView

<body>
  <div ng-view></div>

并将内容放入模板中:

<!-- templates/settings.html' -->

<div class="container">
  <div class="stock_name">{{stock.name}}</div>
</div>

也重定向到你的路线:

.otherwise({redirectTo: '/settings'});

【讨论】:

  • 感谢您的指点,为了简化手头的问题,我将这部分从示例中删除。我已经包含了 settings.html 和 ng-view 的代码,以帮助避免混淆
  • otherwise 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2016-02-09
相关资源
最近更新 更多