无法在角度中获取html标签的属性

时间:2016-10-23 22:36:14

标签: angularjs asp.net-mvc

我想在角度控制器中获取和属性的值,但它是undefined。如果它有助于一切都在MVC.net应用程序中。

简化代码:

TestCtrl.js:

angular.module('CMM')
    .controller('TestCtrl', ['$scope', '$element', '$attrs', function ($scope, elem, $attrs) {
        $scope.name = "mohsen";
        $scope.api = $attrs.api;
        alert($attrs.api);
        alert(elem.data('api'));
        console.log('hi, I am here');
    }]);

app.js:

var app = angular.module('CMM', ['ngRoute','slServices', 'slControllers', 'ngAnimate', 'smart-table', 'ui.bootstrap']);
.....

用法:

<div id="content" ng-controller="TestCtrl">
    <h3>
        <input type ="text" ng-model="name"/>
        <input type="text" ng-model="api" api="/sl/asdf"/>
         ....

1 个答案:

答案 0 :(得分:1)

您的代码无法正常工作,因为$element$attrs不可注入。如注释中所述,您可以使用指令来访问属性并从指令引用控制器。这不是真正的正确方法,但可以使它工作。

因此,您的控制器可以公开一个方法,用于为其提供指令中的API值,如下所示:

.controller("TestCtrl", function ($scope) {
    this.SetApi = function (api) {
    $scope.api = api;
  };
})

你的指令可以引用控制器并调用方法来提供值,如下所示:

.directive("getApi", function () {
    return {
    controller: "TestCtrl",
    link: function (scope, element, attr, controller) {
      controller.SetApi(attr.api);
    }
  };
});

以下是一个工作示例:https://jsfiddle.net/n5t6pfcc/