AngularJS:如何从指令中的隔离范围更改范围值

时间:2015-01-06 20:30:29

标签: angularjs angularjs-directive angularjs-scope

如何更改指令的范围值?我试过这样的方式:

在模板中:

<h1>{{abcd}}</h1>
<example-directive abcd="abcd"></example-directive>

指令

..
scope: {
   abcd: '='
},
link: function($scope){
   $scope.abcd = "change it pleeease";
}
....

但结果我没有回来。所以&#39; h1&#39;标签是空的.... 有谁知道为什么?

update1 - 我的完整代码

指令:

(function(){
'use strict';

var standingsDirective = function(api, $http){
    return {
        restrict: 'E',
        scope : {
            sid: '=',
            loadingstatus: '='
        },
        templateUrl: "teams/views/standings.html",
        link: function(scope){
            scope.loadingstatus = "loading";

            $http.get(api+'/getsomething'+scope.id).success(function(result){
                scope.data =  result;

                if(scope.data && scope.data.length > 0){
                    scope.loadingstatus = "loaded";
                }else{
                    scope.loadingstatus = "notloaded";
                }
            }).error(function(){
                scope.loadingstatus = "notloaded";
            });
        }
    };
};

var teamsModule = angular.module('app.teams');
teamsModule.directive('standings', ['api', '$http', standingsDirective]);

}());

模板文件:

...
<a ng-show="loadingstatus == 'loaded'" ng-click="subview='standing'" class="activeLink">standings - {{loadingstatus}}</a>
...
<standings sid="sid" loadingstatus="loadingstatus" ng-show="subview=='standing'"></standings>
...

2 个答案:

答案 0 :(得分:3)

回答我的问题:

首先,非常感谢&#34; Fedaykin&#34;帮我解决他的评论。他是那个指出它应该工作的人,所以问题应该在我的代码的另一部分。

计算出ng-if属性阻止了我的指令的执行。 以下是html代码的样子:

<a ng-show="loadingstatus == 'loaded'" ng-click="subview='standing'" class="activeLink">standings - {{loadingstatus}}</a>
<div ng-if="subview=='standing'">
    ...
    <standings sid="sid" loadingstatus="loadingstatus" ng-show=" subview=='standing'">    </standings>
    ....
</div>

因此造成了这种奇怪的行为。 我希望这篇文章能帮助其他人解决问题,如果他们有类似问题的话。

答案 1 :(得分:0)

嗯,它应该有效,我不知道哪些是错的,也许如果你分享更多的代码,我们就可以找出问题。

这是一个非常简单的工作示例: http://plnkr.co/edit/eXhog9wsslyuHEZO2dOY

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

app.controller('MainCtrl', function($scope) {

});

app.directive('exampleDirective',[function(){
  return{
    restrict: 'E',
    scope: {
      name: '='
    },
    link: function($scope){
      $scope.name = "change it pleeease";
    }
  }
}]);

以下是关于在控制器和指令之间共享数据的更详细示例:

http://plnkr.co/edit/Q1VdKJP2tpvqqJL1LF6m?p=preview